Bonjour,
Voila je rencontre un petit problème avec mon code.
Model.php
<?php
class Model{
static $connections = array();
public $conf = 'default';
public $table = false;
public $db;
public function __construct(){
//je ne connecter a la base de donne
$conf = Conf::$databases[$this->conf];
if(isset(Model::$connections[$this->conf])){
$this->db = Model::$connections[$this->conf];
return true;
}
try{
$pdo = new PDO('mysql:host='.$conf['host'].';dbname='.$conf['database'].';',$conf['login'],$conf['password'],array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
Model::$connections[$this->conf] = $pdo;
$this->db = $pdo;
}catch(PDOException $e){
if(Conf::$debug >= 1){
die($e->getMessage());
}else{
die('Page indisponible !!!');
}
}
//echo "j'ai charge la base de donne et je m'y suis connecte";
//j'initialise qulque variable
if($this->table === false){
$this->table = strtolower(get_class($this)).'s';
}
}
public function find($req){
$sql = 'SELECT * FROM '.$this->table.' as '.get_class($this).' ';
//Construiction de la conditions
if(isset($req['conditions'])){
$sql .= 'WHERE ';
if(!is_array($req['conditions'])){
$sql .= $req['conditions'];
}else{
$cond = array();
foreach($req['conditions'] as $k=>$v){
if(!is_numeric($v)){
$v = '"'.mysql_real_escape_string($v).'"';
}
$cond[] = "$k=$v";
}
$sql .= implode(' AND ',$cond);
}
}
die($v);
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
public function findFirst($req){
return current($this->find($req));
}
}
?>
SELECT * FROM posts as Post WHERE id = \'\"
Deprecated: mysql_real_escape_string(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO :(
Bonsoir.
La réponse t'es donné dans le message d'erreur, la fonction mysql_real_escape_string()
est déprécié, il te faut par exemple utiliser mysqli_real_escape_string()
au lieu de mysql_real_escape_string()
.
Tu as donc juste à remplacer par :
$v = '"'.mysqli_real_escape_string($v).'"';
@Lartak c'est pas si simple car les fonctions mysqli demandent un $link or il utilise PDO
il n'y a pas d'équivalent de mysql_real_escape_string en PDO (voir ici)
@PKR comme tu utilises déjà une requête préparée, il te suffit d'utiliser les placeholder "$k = ?" et construire un tableau de $v que l'on passe ensuite à la méthode execute
c'est pas si simple car les fonctions mysqli demandent un $link or il utilise PDO
En effet, je me suis tellement habitué à coder en POO, que j'avais un peu oublié ça.
Sinon PKR, quelqu'un d'autre avait eu le même problème que toi et il lui avait été proposé d'utiliser la fonction addslashes
à la place de mysql_real_escape_string
, voir ici : créer un site de A à Z jour 3 problème mysql_escape_string.
Merci infiniment pour vos réponses Lartak ta fonction addslashes a bien réglé mon problème merci
Tu devrais t'intéresser au pb de l'injection SQL
addslashes n'est plus du tout adapté aux encodages multi-byte comme UTF-8
voir ici le pb lié aux homoglyph