Utilisation de caractères génériques dans les instructions préparées PDO
L'exécution de requêtes MySQL qui utilisent des caractères génériques, tels que % pour faire correspondre n'importe quel nombre de caractères, peut poser des problèmes lors de l'utilisation d'instructions préparées par PDO. Cet article explique comment utiliser efficacement les caractères génériques avec les instructions préparées.
Requête originale
L'objectif initial était d'exécuter la requête suivante :
SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
Tentatives infructueuses
Deux tentatives infructueuses ont été faites pour utiliser préparé déclarations :
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindParam(':name', "%" . $name . "%"); $stmt->execute(); $stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'"); $stmt->bindParam(':name', $name); $stmt->execute();
Solution
Le problème réside dans l'utilisation de bindParam(). Pour utiliser correctement les caractères génériques dans les instructions préparées, vous devez utiliser bindValue(). Le code ci-dessous démontre l'approche correcte :
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%'); $stmt->execute();
Alternative
Une autre option viable consiste à modifier le code pour utiliser bindParam() de la manière suivante :
$name = "%$name%"; $stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindParam(':name', $name); $stmt->execute();
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!