Maison  >  Article  >  développement back-end  >  Pourquoi mon instruction préparée PHP PDO avec la requête MySQL LIKE ne renvoie-t-elle aucun résultat ?

Pourquoi mon instruction préparée PHP PDO avec la requête MySQL LIKE ne renvoie-t-elle aucun résultat ?

DDD
DDDoriginal
2024-10-31 10:41:02952parcourir

Why does my PHP PDO prepared statement with MySQL LIKE query return no results?

Déclaration préparée PHP PDO - Requête MySQL LIKE

Problème :
Lors de l'exécution d'une requête MySQL LIKE à l'aide PDO de PHP, la recherche ne renvoie aucun résultat.

Requête :

<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>

Code PHP :

<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';

$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>

Solution :
L'erreur réside dans la valeur attribuée au paramètre :searchTerm dans la méthodeexecute(). Les guillemets doubles ne sont pas nécessaires lors de l'utilisation d'instructions préparées.

Code PHP corrigé :

<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>

Explication :
Les instructions préparées gèrent les données séparément de la requête. Ils n'effectuent pas de remplacement de chaîne. Les guillemets ne sont ajoutés que lors de l'intégration de valeurs directement dans la requête.

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!

Déclaration:
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