Maison > base de données > tutoriel mysql > Comment lier en toute sécurité des paramètres LIKE avec des caractères génériques dans PDO ?

Comment lier en toute sécurité des paramètres LIKE avec des caractères génériques dans PDO ?

Patricia Arquette
Libérer: 2024-12-06 03:09:12
original
905 Les gens l'ont consulté

How to Safely Bind LIKE Parameters with Wildcards in PDO?

Liaison de valeurs LIKE avec % de caractères génériques dans PDO

PDO fournit un moyen sécurisé d'exécuter des requêtes SQL avec des paramètres liés, empêchant ainsi les vulnérabilités d'injection SQL. Lors de la liaison de paramètres LIKE qui incluent des caractères génériques tels que %, vous pourriez rencontrer des confusions.

Dans la requête ci-dessous, nous essayons de lier la variable $partial% à l'aide de PDO :

select wrd from tablename WHERE wrd LIKE '$partial%'
Copier après la connexion

Il est essentiel de comprendre comment PDO gère ces liaisons. L'approche correcte dépend de vos besoins spécifiques.

Option 1 : Lier avec un caractère générique partiel (%) à la fin

Oui, c'est une option valide :

select wrd from tablename WHERE wrd LIKE ':partial%'
Copier après la connexion

où :partial est lié à $partial="somet".

Option 2 : lier avec un caractère générique partiel (%) à l'intérieur du Valeur

Vous pouvez également utiliser cette approche :

select wrd from tablename WHERE wrd LIKE ':partial'
Copier après la connexion

où :partial est lié à $partial="somet%".

Alternative : utilisez la fonction CONCAT

Si vous préférez, vous pouvez effectuer la concaténation de chaînes au sein de la requête MySQL elle-même :

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')
Copier après la connexion

Caractères spéciaux Gestion

Si votre mot partiel contient des caractères spéciaux tels que %, _ ou , vous devez les échapper manuellement avant de lier le paramètre. Le code suivant le démontre :

$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal