sql >> Databáze >  >> RDS >> Mysql

mysql_real_escape_string není dost dobrý?

Důvod z názvu metody queryAsArray , zdá se, že používáte tento DbBase třídy z komentářů na manuálové stránce funkcí MySQL . Pokud ano, je to query metoda, která odstraní znak escape z uvozovek:

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

Pak není zázrak, že váš příklad funguje (zjednodušil jsem to):

$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. Příkaz Oracle insert if neexistuje

  2. Používání Microsoft Access s Power BI

  3. Jak odstranit řádky z tabulky spojení (ManyToMany) v Doctrine?

  4. MySQL JOIN s LIMIT 1 na spojeném stole