Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql_real_escape_string não é bom o suficiente?


Raciocínio a partir do nome do método queryAsArray , parece que você está usando este DbBase class dos comentários da página de manual de funções do MySQL . Se sim, é a query método que remove o caractere de escape das aspas com escape:
function query($sql, &$records = null){
    $sql = str_replace(array('\\"', "\\'"), array('"', "'"), $sql);
    // …
}

Então não é um milagre que seu exemplo funcione (simplifiquei):
$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! ↑