sql >> Databasteknik >  >> RDS >> Mysql

mysql_real_escape_string inte tillräckligt bra?

Resonemang från metodnamnet queryAsArray , det verkar som att du använder denna DbBase klass från kommentarerna på MySQL-funktionsmanualsidan . Om så är fallet är det query metod som tar bort escape-tecknet från citattecken:

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

Då är det inte ett mirakel att ditt exempel fungerar (jag förenklade det):

$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! ↑


  1. Är det möjligt att köra ett SQLPLUS-skript på en fil kodad som UTF-8 med BOM

  2. Hur man återställer SQL-fil genererad av MySQLDump med hjälp av kommandotolken

  3. SQL många till många väljer

  4. Kan inte visa data från QSqlQueryModel i en QML TableView