Maison >développement back-end >tutoriel php >Pourquoi l'instruction préparée par PDO ne parvient-elle pas à renvoyer les résultats avec la requête LIKE ?

Pourquoi l'instruction préparée par PDO ne parvient-elle pas à renvoyer les résultats avec la requête LIKE ?

DDD
DDDoriginal
2024-11-01 12:50:29544parcourir

Why Does PDO Prepared Statement Fail to Return Results with LIKE Query?

Déclaration préparée PDO en PHP : problèmes avec les requêtes MySQL LIKE

La classe PDO de PHP avec MySQL offre un mécanisme pour exécuter des instructions SQL avec des requêtes paramétrées , améliorant la sécurité et les performances. Cependant, les utilisateurs peuvent rencontrer des difficultés lors de l'utilisation de requêtes LIKE.

Problème : l'instruction préparée par PDO ne renvoie pas de résultats avec la requête LIKE

Lors de la tentative d'exécution d'une requête similaire à la suivante en utilisant PDO :

<code class="mysql">SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"</code>

Les utilisateurs peuvent constater qu'aucun résultat n'est renvoyé.

Solution : paramétrage correct

Le problème réside dans un paramétrage incorrect du terme de recherche. En PHP, les instructions préparées utilisent des espaces réservés nommés, qui nécessitent une syntaxe différente. Le paramétrage correct pour la requête LIKE est :

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

Explication :

Les instructions préparées séparent les données de la requête et utilisent des espaces réservés. Par conséquent, il n'est pas nécessaire de placer le terme de recherche entre guillemets doubles ou d'effectuer une concaténation de chaînes.

Autres erreurs courantes :

<code class="php">WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));  // Incorrect</code>
  • Cette approche est incorrect car il ajoute des guillemets doubles inutiles.
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));  // Incorrect</code>
  • L'utilisation de CONCAT pour envelopper le terme de recherche dans la requête n'est pas nécessaire pour le paramétrage.

En utilisant le paramétrage correct, vous pouvez exécuter avec succès des requêtes LIKE à l'aide d'instructions préparées par PDO en PHP.

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