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!