sql >> Base de Datos >  >> RDS >> Mysql

¿Desinfecto/escape correctamente?

Por alguna razón, también necesitamos escape a backslash también.
Entonces, creo que el código correcto sería

if(isset($_GET['q'])){
  $_GET['q'] = trim($_GET['q']);
  if(strlen($_GET['q']) >= 2){
    $q = $_GET['q'];
    $q = '%'.addCslashes($q, '\%_').'%';
    // now we have the value ready either for escaping or binding
    $q = mysql_real_escape_string($q);
    $sql = "SELECT name, age, address FROM book WHERE name LIKE '$q'";
    //or 
    $sql = "SELECT name, age, address FROM book WHERE name LIKE ?";
    $stm = $pdo->prepare($sql);
    $stm->execute(array($q));
    $data = $stm->fetchAll();
  }
}

Para la salida, use

echo htmlspecialchars($_GET['q']);

aquí no se necesitan barras diagonales.

las comillas mágicas no dañarán su seguridad si no las usa.
el conjunto de caracteres es peligroso en el caso de algunas codificaciones extremadamente raras, pero solo si se establece incorrectamente. si mysql(i)_set_charset o DSN (en el caso de PDO) se usaron para el propósito:está seguro nuevamente.

En cuanto a PDO, un etiqueta wiki debería ser suficiente para empezar, creo