Bonjour,
Je transforme mes vieilles fonctions Mysql vers PHP Data Objects et je ne serais pas contre quelques éclaircissements concernant l’échappement des caractères.
Pour faciliter la portabilité du site, j'avais pris l'habitude de désactiver purement et simplement magic_quotes_gpc et de gérer l’échappement dans le code avec la fonction addslashes etc...
Mais j'ai cru comprendre que addslashes présentait quelques failles.
La fonction mysql_real_escape_string() est quant à elle déconseillée.
http://php.net/manual/fr/function.my...ape-string.php
Avec PDO, pour communiquer avec la base de données, je dois apparemment opter pour PDO::query ou PDO::exec si la requête est plutôt destinée à être exécutée une fois et PDO::prepare pour plusieurs fois.
Pour PDO*::prepare, dans la doc il est indiqué
http://fr.php.net/manual/fr/pdo.prepare.phpaident à prévenir les attaques par injection SQL en éliminant le besoin de protéger les paramètres manuellement.
"Aident" ? Dois-je comprendre qu'il faut quand même prendre certaines précautions ?
Pour PDO*::query et exec, c'est encore moins clair pour moi. Il est question de PDO::quote mais:
http://www.php.net/manual/fr/pdo.quote.phpSi vous utilisez cette fonction pour construire des requêtes SQL, vous êtes vivement invités à utiliser PDO::prepare() pour préparer les requêtes SQL
avec des paramètres liés au lieu d'utiliser PDO::quote() pour interpréter les entrées utilisateur dans la requête SQL.
Donc pour une requête avec entrées utilisateurs, je dois aussi utiliser PDO::prepare même si elle est destinée à n'être exécutée qu'une seul fois ??
J'avoue, je comprends plus, y a t'il une possibilité d’échapper proprement PDO::exec et PDO::query ou je les laisse définitivement tomber et je n'utilise que PDO::prepare?
Merci beaucoup pour le coup de main.
Partager