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!