Voila mon soucis est tout simple.
Je bosse actuellement sur un version dérivée a ma sauce du "dev son site en php", on va dire qu'on en est au J8 ^^.
Le problème, c'est que j'ai mis a jour mon wamp, et que maintenant, j'ai une sale erreur qui pointe le boud de son nez!
En effet, la fonction mysql_escape_string a la ligne 116 de mon model.php, a l'intérieur du dossier core me retourne une erreur dégueulasse.
Ce string (oui, c'est un string pour moi, il me rentre bien ou vous savez la^^ ) est apparemment a mettre a l'article des rebuts, car affichée en "deprecated" et d'après la doc php, est a remplacer soit disant par mysql_real_escape_string, mais qui est aussi sur leur propre doc a l'article des rebuts.

Donc la question est: doit-je me pencher sur mysql_real_escape_string au risque de devoir encore tout bidouiller a la version suivante, d'autant que si tel est le cas, le string en question est pas fichu de détecter le utf8 alors qu'il est sencé le faire automatiquement (ma db est en utf8 et mes pages aussi), donc il faudrais que je fasse un mysql_set_charset quelque part, mais je sais pas ou je vais foutre mysql_set_charset, d'autant que lui aussi est obselète... enfin bref je deviens taré.

Partant de 0, j'ai aucun soucis a coder un truc entier sans faire de conneries, mais que d'une traite, car si je retourne en arrière, je perd le fil de mon raisonnement. La, je me sent pas de recoder tout le site, d'autant que je peux pas juste downgrader mon wamp pour faire joli, vu que si je l'ai upgrade, c'est justement car mon hebergeur cible utilise le dernier php.

En gros, avec quoi remplacer ces vieilles fonctions a deux roubles sans mess-up totalement la structure du site. Si vous en voulez le plan, dites vous que c'est exactement celui de Php dev site jour 7 dans l'idée, après juste certaines variables sont plus les mêmes, car je le lie a plusieures sql et a un phpbb semi intégré. Donc si vous me donnez une ligne un fichier une fonction a modifiée, il me suffira de recouper ma version avec l'originale pour trouver exactement ce que j'ai a faire.

En espérant pas avoir trop QQ x), et dans l'attente d'une réponse aussi libératrice que des toilettes qui se libèrent après avoir mangé au quick,
Cordialement,
Un Corbeau qui s'en arrache les plumes.

2 réponses


PHP passant au tout PDO, il n'y a rien qui est supposé la remplacer (la protection contre les injections est faite différemment avec PDO)

Cale dit, la doc raconte que: mysql_real_escape_string() appelle la fonction mysql_escape_string() de la bibliothèque MySQL qui ajoute un anti-slash aux caractères suivants : NULL, \x00, \n, \r, \, ', " et \x1a.

Donc tu peux te faire ta fonction a toi qui fait la meme chose:

function myEscape($string)
{
    $escape = array("\\", "\x00", "\n", "\r", "'", '"', "\x1a");
    $replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");
    return str_replace($escape, $replace, $string);
}

Tout premierement je tiens a m'excuser tout particulierement pour la non-reponse au post, j'ai été en galère d'ordinateur pendant une vingtaine de jours.
Une fois cette chose importante faite, je tiens a noter que finalement je suis paumé dans mon code, j'ai le cerveau qui fait des erreurs lui aussi, y a pas que mon php qui tourne pas rond. Désolé de faire l'affront de demander un machage de travail, mais en clair la fonction "périmée" est dans ce contexte ci: (a savoir que la ligne 1 ici correspond a la ligne 107 dans le fichier)

// Construction de la condition
        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_escape_string($v).'"'; 
                    }

                    $cond] = "$k=$v";
                }
                $sql .= implode(' AND ',$cond);
            }
        }
        if(isset($req'order'])){
            $sql .= ' ORDER BY '.$req'order'];
        }

        if(isset($req'limit'])){
            $sql .= ' LIMIT '.$req'limit'];
        }
        $pre = $this->db->prepare($sql); 
        $pre->execute(); 
        return $pre->fetchAll(PDO::FETCH_OBJ);
    }

...et je sais plus ou j'en suis, j'ai repris le fichier de base du tuto (le model.php dans le core directory), si vous savez me montrer ou ça cloche dans le fichier de base, je saurais le réadapter dans ma version personnelle.
Le fait est que je ne me suis pas vraiment plongé dans le PDO, reprenant le code en main après une certaine periode d'inactivité dans le domaine. Je sens qu'il va me falloir me replonger dedans et m'interresser aux DATA Objects, qui sont un peu des visiteurs du futur pour moi^^
Cordialement,
Le corbeau qui s'est maintenant arraché tellement de plumes qu'il a le croupion a l'air!