Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql_real_escape_string nie jest wystarczająco dobry?

Rozumowanie z nazwy metody queryAsArray , wygląda na to, że używasz tej DbBase klasa z komentarzy na stronie podręcznika funkcji MySQL . Jeśli tak, to jest to query metoda, która usuwa znak zmiany znaczenia ze znaków zmiany znaczenia:

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

To nie cud, że twój przykład działa (uprościłem go):

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:uśrednianie z wartościami null

  2. utf8_general_ci:które znaki są sobie równe?

  3. wstaw do mysql problem

  4. W jaki sposób można przenieść dane starsze niż „Y” dni do archiwum/tabeli historii w MySQL?

  5. Błąd składni SQL LIMIT