"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-03
Parcourir:276

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

Instruction 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 :

SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"

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

Solution : Corriger le paramétrage

Le problème réside dans le 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 :

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

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 mettre le terme de recherche entre guillemets doubles ou d'effectuer une concaténation de chaînes.

Autres erreurs courantes :

WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));  // Incorrect
  • Cette approche est incorrecte car elle ajoute des guillemets inutiles.
WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));  // Incorrect
  • 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 en utilisant PDO a préparé des instructions en PHP.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3