Instruction 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 :
SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"
Les utilisateurs peuvent constater qu'aucun résultat n'est renvoyé.
Solution : Corriger le paramétrage
Le problème réside dans le 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 :
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
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 mettre le terme de recherche entre guillemets doubles ou d'effectuer une concaténation de chaînes.
Autres erreurs courantes :
WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"')); // Incorrect
WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm)); // Incorrect
En utilisant le paramétrage correct, vous pouvez exécuter avec succès des requêtes LIKE en utilisant PDO a préparé des instructions en PHP.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3