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
Libérer: 2024-11-01 12:50:29
original
545 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion
  • 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>
Copier après la connexion
  • 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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal