Maison > base de données > tutoriel mysql > Comment utiliser en toute sécurité des instructions préparées avec des requêtes LIKE en PHP ?

Comment utiliser en toute sécurité des instructions préparées avec des requêtes LIKE en PHP ?

Linda Hamilton
Libérer: 2025-01-16 11:07:57
original
551 Les gens l'ont consulté

How to Safely Use Prepared Statements with LIKE Queries in PHP?

Comprendre les déclarations préparées et les requêtes LIKE

En PHP, lors de l'utilisation d'instructions préparées pour les requêtes LIKE, les paramètres de chaîne doivent être gérés avec soin pour éviter des erreurs potentielles. Les instructions préparées utilisent des espaces réservés (?) Pour empêcher l'injection SQL tout en améliorant les performances.

Cas 1 : utilisez '%{$var}%' pour faire correspondre le nom d'utilisateur

Le code suivant :

<code class="language-php">$sql = 'SELECT * FROM `users` WHERE username LIKE \'%{?}%\' ';</code>
Copier après la connexion

renvoie une erreur car l'espace réservé ? n'est pas correctement défini dans l'instruction SQL préparée.

Cas 2 : utilisez %{?}% pour faire correspondre le nom d'utilisateur

Le code suivant :

<code class="language-php">$sql = 'SELECT * FROM `users` WHERE username LIKE %{?}% ';</code>
Copier après la connexion

échouera également car la syntaxe n'est pas valide. Le signe de pourcentage (%) ne peut pas être utilisé directement comme espace réservé dans les instructions préparées.

Solution : Utiliser une variable LIKE concaténée

Pour résoudre ce problème, utilisez la variable LIKE concaténée :

<code class="language-php">$likeVar = "%" . $yourParam . "%";
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->bind_param("s", $likeVar);
$stmt->execute();</code>
Copier après la connexion

Dans cet exemple, $likeVar est construit en combinant un signe de pourcentage avec la saisie utilisateur $yourParam. La condition LIKE utilise ensuite l'espace réservé ?, qui est lié à la chaîne concaténée $likeVar lors de la liaison des paramètres.

Cette approche garantit que le signe de pourcentage est traité comme un caractère littéral plutôt que comme un élément de syntaxe dans l'instruction préparée. Il permet également des recherches insensibles à la casse en garantissant que $likeVar contient les caractères génériques corrects.

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