Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql_real_escape_string pas assez bon ?

Raisonnement à partir du nom de la méthode queryAsArray , il semble que vous utilisez cette DbBase class à partir des commentaires de la page de manuel des fonctions MySQL . Si oui, c'est la query méthode qui supprime le caractère d'échappement des guillemets échappés :

function query($sql, &$records = null){
    $sql = str_replace(array('\\"', "\\'"), array('"', "'"), $sql);
    // …
}

Alors ce n'est pas un miracle que ton exemple fonctionne (je l'ai simplifié) :

$input = "', BAD SQL INJECTION --";

$sql = "SELECT '".mysql_real_escape_string($input)."'";
var_dump($sql);  // string(33) "SELECT '\', BAD SQL INJECTION --'"
//                      everything’s OK ↑

$sql = str_replace(array('\\"', "\\'"), array('"', "'"), $sql);
var_dump($sql);  // string(32) "SELECT '', BAD SQL INJECTION --'"
//                                Oops! ↑