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 ?

Patricia Arquette
Libérer: 2024-10-30 19:11:30
original
345 Les gens l'ont consulté

Why Am I Getting Null Results When Using PHP PDO Prepared Statements with MySQL LIKE Queries?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!