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
Libérer: 2024-11-28 21:32:15
original
330 Les gens l'ont consulté

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

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

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

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

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