Maison >base de données >tutoriel mysql >Pourquoi ma déclaration préparée PHP PDO ne fonctionne-t-elle pas avec les requêtes MySQL LIKE ?

Pourquoi ma déclaration préparée PHP PDO ne fonctionne-t-elle pas avec les requêtes MySQL LIKE ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-30 10:41:13511parcourir

Why Doesn't My PHP PDO Prepared Statement Work with MySQL LIKE Queries?

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

Lorsque vous travaillez avec la classe PDO de PHP (pilote MySQL), l'exécution d'une requête MySQL LIKE à l'aide d'une instruction préparée peut être une tâche embarrassante. La syntaxe apparemment simple ne parvient souvent pas à produire le résultat souhaité.

Considérez la requête suivante qui récupère des données de manière transparente à l'aide du client MySQL :

SELECT   ...
FROM      hs
...
WHERE     hs.hs_text LIKE "%searchTerm%"
LIMIT 25;

L'énigme

Cependant, lors du portage de cette requête vers PHP, vous pourriez rencontrer la frustration de ne pouvoir renvoyer aucun résultat, quelle que soit la syntaxe que vous essayez. Le code ci-dessous illustre ce problème :

$sql = 
    'SELECT   ...
    FROM      hs
    ...
    WHERE     hs.hs_text LIKE :searchTerm
    LIMIT 25';

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

Tentatives de fournir le terme de recherche sous la forme CONCAT('%', ?, '%'), "%:searchTerm%" ou ":searchTerm", tandis que modifier la ligne d'exécution en conséquence s'avère futile.

La solution

La clé pour résoudre cette énigme consiste à comprendre comment les instructions préparées gèrent les données. Ils transmettent les données séparément de la requête, éliminant ainsi le besoin de guillemets lors de l'intégration de valeurs.

Par conséquent, la bonne solution est :

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

En supprimant les guillemets doubles englobants du paramètre de terme de recherche , vous exploitez désormais la puissance des instructions préparées, vous permettant d'exécuter avec succès votre requête LIKE.

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