Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-ce que je désinfecte/évacue correctement ?

Pour une raison quelconque, nous devons également échapper à une barre oblique inverse aussi.
Donc, le bon code serait, je crois

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();
  }
}

Pour la sortie, utilisez

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

les barres obliques ne sont pas nécessaires ici.

les guillemets magiques ne nuiront pas à votre sécurité si vous ne les utilisez pas.
charset est dangereux dans le cas de certains encodages extrêmement rares, mais uniquement s'il est mal défini. si mysql(i)_set_charset ou DSN (en cas d'AOP) ont été utilisés à cette fin - vous êtes à nouveau en sécurité.

Quant à PDO, un tag wiki devrait être suffisant pour commencer, je crois