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
Libérer: 2024-12-18 13:50:16
original
922 Les gens l'ont consulté

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%'
Copier après la connexion

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 . "%");
Copier après la connexion

et

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'");
$stmt->bindParam(':name', $name);
Copier après la connexion

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 . '%');
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal