Utilisation de caractères génériques dans les instructions préparées PDO
L'exécution de requêtes SQL implique souvent de filtrer les données en fonction de critères spécifiques. Les instructions préparées constituent un moyen sécurisé d'y parvenir en empêchant les vulnérabilités d'injection SQL. Cependant, l'utilisation de caractères génériques dans les instructions préparées peut poser des problèmes.
Le défi
Considérez la requête suivante qui vise à rechercher des utilisateurs dont le nom contient « n'importe quel nom » :
SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
Lorsque vous essayez d'exécuter cette requête avec des instructions préparées, approches courantes comme :
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindParam(':name', "%" . $name . "%");
et
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'"); $stmt->bindParam(':name', $name);
peut ne pas fonctionner. En effet, l'utilisation de caractères génériques dans l'instruction SQL LIKE nécessite un traitement spécial dans les instructions préparées.
La solution
Pour utiliser correctement les caractères génériques avec les instructions préparées, on peut utiliser bindValue () au lieu de bindParam(). Voici un exemple :
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%');
Alternativement, bindParam() peut être utilisé, mais avec une syntaxe légèrement modifiée :
$name = "%$name%"; $stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name"); $stmt->bindParam(':name', $name);
Les deux approches garantissent que les caractères génériques sont correctement échappés et traités. par la base de données. En utilisant bindValue() ou bindParam() de cette manière, on peut rechercher efficacement des données à l'aide de caractères génériques dans les instructions préparées, garantissant à la fois la sécurité et la fonctionnalité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!