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
Patricia Arquetteoriginal
2024-12-06 03:09:12930parcourir

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%'

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%'

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'

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, '%')

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);

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