Maison >développement back-end >tutoriel php >Pourquoi est-ce que j'obtiens des résultats nuls lorsque j'utilise des instructions préparées PHP PDO avec des requêtes MySQL LIKE ?
Instruction préparée PHP PDO Requête MySQL LIKE : résoudre les résultats nuls
Dans MySQL, une opération courante consiste à interroger des données à l'aide d'une clause LIKE pour effectuer recherches par caractères génériques. Lorsque vous utilisez la classe PDO de PHP avec MySQL, il est essentiel de comprendre comment créer correctement ces requêtes pour éviter les résultats nuls.
Examinons un scénario dans lequel une requête LIKE ne renvoie pas de résultats via la classe PDO. La requête d'origine dans le client MySQL est :
<code class="sql">SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE "%searchTerm%" LIMIT 25;</code>
Cette requête exploite l'opérateur LIKE pour rechercher toutes les lignes où la colonne hs.hs_text contient le terme de recherche dans sa valeur. Cependant, lorsque cette requête est traduite dans la classe PDO de PHP, elle ne renvoie aucun résultat.
<code class="php">$sql = 'SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE :searchTerm LIMIT 25'; $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>
Le problème dans le code PHP est la présence de guillemets doubles autour du terme de recherche dans la clause WHERE. Les instructions préparées en PHP ne nécessitent pas de guillemets lors de la liaison des valeurs. Les guillemets ne sont nécessaires que lorsque les valeurs de chaîne sont directement intégrées dans la requête elle-même.
Pour résoudre le problème, supprimez simplement les guillemets doubles du paramètre searchTerm :
<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
Cette modification autorise le PDO pour lier correctement la valeur searchTerm à la requête, ce qui produira les résultats attendus.
Les instructions préparées offrent une sécurité et une efficacité accrues en séparant les données de la requête. Ils empêchent les vulnérabilités d'injection SQL et optimisent l'exécution des requêtes en permettant à la base de données de gérer le processus de liaison. Comprendre comment utiliser correctement les requêtes LIKE avec la classe PDO de PHP est essentiel pour une récupération efficace des données des bases de données MySQL.
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!