Maison >base de données >tutoriel mysql >Comment utiliser correctement les instructions préparées PDO avec les requêtes MySQL LIKE ?

Comment utiliser correctement les instructions préparées PDO avec les requêtes MySQL LIKE ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-01 07:44:14166parcourir

How to Correctly Use PDO Prepared Statements with MySQL LIKE Queries?

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

En PHP, utiliser des instructions préparées avec PDO pour les requêtes MySQL LIKE peut être difficile. Cet article aborde un problème courant rencontré lors de la tentative d'exécution d'une requête LIKE à l'aide d'instructions préparées.

Considérez la requête suivante :

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;

Cette requête recherche avec succès les chaînes contenant le terme de recherche lors de son exécution. directement dans le client MySQL. Cependant, lors de la traduction de cette requête en PDO avec des instructions préparées, les résultats ne sont pas renvoyés.

Le code PHP fourni illustre les tentatives infructueuses d'exécution de la requête LIKE en utilisant diverses syntaxes. Le problème réside dans la syntaxe utilisée pour spécifier le terme de recherche dans l'instruction préparée.

Les tentatives incorrectes incluent :

$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));

L'approche correcte consiste à utiliser la syntaxe suivante :

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

Explication :

Les instructions préparées n'exécutent pas une chaîne simple remplacements. Les données sont transférées séparément de la requête, ce qui rend les guillemets inutiles lors de l'intégration des valeurs. Les guillemets ne sont requis que lorsque la valeur réelle citée doit être insérée 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