Maison > Article > développement back-end > Comment utiliser des caractères génériques avec des instructions préparées par PDO : pourquoi bindParam() échoue et comment utiliser bindValue() ou des chaînes préformatées ?
Utilisation de caractères génériques avec des instructions préparées PDO
Exécuter des requêtes SQL avec des caractères génériques à l'aide d'instructions préparées PDO (PHP Data Objects) peut être difficile. Cet article aborde le problème et propose des solutions.
La question présentée consiste à rechercher toutes les lignes de la table gc_users avec un caractère générique dans le champ de nom, qui peut être exprimé comme :
<code class="sql">SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%';</code>
Quand en essayant d'exécuter cette requête à l'aide d'instructions préparées, deux approches infructueuses ont été adoptées :
<code class="php">$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();</code>
La solution préférée consiste à utiliser bindValue() au lieu de bindParam() :
<code class="php">$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%'); $stmt->execute();</code>
Alternativement, comme suggéré dans la réponse fournie, bindParam() peut également être utilisé :
<code class="php">$name = "%$name%"; $query = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name"); $query->bindParam(':name', $name); $query->execute();</code>
Ces solutions montrent comment utiliser avec succès les caractères génériques avec les instructions préparées par PDO.
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!