Maison >base de données >tutoriel mysql >Comment utiliser correctement les caractères génériques avec les instructions préparées par PDO ?

Comment utiliser correctement les caractères génériques avec les instructions préparées par PDO ?

DDD
DDDoriginal
2024-12-18 13:50:16930parcourir

How to Properly Use Wildcards with PDO Prepared Statements?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn