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>
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>
é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>
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!