Maison >base de données >tutoriel mysql >Comment utiliser correctement les caractères génériques avec les instructions préparées PDO dans MySQL ?

Comment utiliser correctement les caractères génériques avec les instructions préparées PDO dans MySQL ?

DDD
DDDoriginal
2024-11-28 21:32:15312parcourir

How to Properly Use Wildcards with PDO Prepared Statements in MySQL?

Utilisation de caractères génériques dans les instructions préparées PDO

L'exécution de requêtes MySQL qui utilisent des caractères génériques, tels que % pour faire correspondre n'importe quel nombre de caractères, peut poser des problèmes lors de l'utilisation d'instructions préparées par PDO. Cet article explique comment utiliser efficacement les caractères génériques avec les instructions préparées.

Requête originale

L'objectif initial était d'exécuter la requête suivante :

SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'

Tentatives infructueuses

Deux tentatives infructueuses ont été faites pour utiliser préparé déclarations :

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindParam(':name', "%" . $name . "%");
$stmt->execute();

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'");
$stmt->bindParam(':name', $name);
$stmt->execute();

Solution

Le problème réside dans l'utilisation de bindParam(). Pour utiliser correctement les caractères génériques dans les instructions préparées, vous devez utiliser bindValue(). Le code ci-dessous démontre l'approche correcte :

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindValue(':name', '%' . $name . '%');
$stmt->execute();

Alternative

Une autre option viable consiste à modifier le code pour utiliser bindParam() de la manière suivante :

$name = "%$name%";
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindParam(':name', $name);
$stmt->execute();

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