Déclaration préparée PDO en PHP : problèmes avec les requêtes MySQL LIKE
La classe PDO de PHP avec MySQL offre un mécanisme pour exécuter des instructions SQL avec des requêtes paramétrées , améliorant la sécurité et les performances. Cependant, les utilisateurs peuvent rencontrer des difficultés lors de l'utilisation de requêtes LIKE.
Problème : l'instruction préparée par PDO ne renvoie pas de résultats avec la requête LIKE
Lors de la tentative d'exécution d'une requête similaire à la suivante en utilisant PDO :
<code class="mysql">SELECT * FROM hs WHERE hs_text LIKE "%searchTerm%"</code>
Les utilisateurs peuvent constater qu'aucun résultat n'est renvoyé.
Solution : paramétrage correct
Le problème réside dans un paramétrage incorrect du terme de recherche. En PHP, les instructions préparées utilisent des espaces réservés nommés, qui nécessitent une syntaxe différente. Le paramétrage correct pour la requête LIKE est :
<code class="php">$prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
Explication :
Les instructions préparées séparent les données de la requête et utilisent des espaces réservés. Par conséquent, il n'est pas nécessaire de placer le terme de recherche entre guillemets doubles ou d'effectuer une concaténation de chaînes.
Autres erreurs courantes :
<code class="php">WHERE hs_text LIKE :searchTerm $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"')); // Incorrect</code>
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\') $ret = $prep->execute(array($searchTerm)); // Incorrect</code>
En utilisant le paramétrage correct, vous pouvez exécuter avec succès des requêtes LIKE à l'aide d'instructions préparées par PDO en PHP.
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!