Maison >développement back-end >tutoriel php >Comment concaténer correctement des variables avec des instructions préparées en SQL ?

Comment concaténer correctement des variables avec des instructions préparées en SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-16 02:50:11463parcourir

How to Properly Concatenate Variables with Prepared Statements in SQL?

Concaténation de variables avec des instructions préparées

Lors de l'utilisation d'instructions préparées, il est essentiel de concaténer correctement les variables avec la requête SQL. Une syntaxe incorrecte peut entraîner des erreurs, telles que celles rencontrées dans les fragments de code suivants :

$sql = 'SELECT * FROM `users` WHERE username LIKE \'%{$var}%' '; // Error: Number of variables doesn't match number of parameters
$sql = 'SELECT * FROM `users` WHERE username LIKE %{?}% '; // Error: Wrong SQL

L'approche correcte

Pour éviter ces erreurs, suivez les étapes suivantes :

  1. Concaténez votre paramètre avec des caractères génériques en dehors du préparé déclaration :
$likeVar = "%" . $yourParam . "%";
  1. Préparez la requête en utilisant ? comme espace réservé :
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?");
  1. Liez le paramètre à l'instruction préparée :
$stmt->bind_param("s", $likeVar);

Dans cet exemple, $likeVar contient la valeur à recherché avec des caractères génériques ("%...%"). Le lier au type de paramètre s (string) garantit qu'il est correctement géré dans la requête de base de données.

Insensibilité à la casse

Si vous avez besoin d'une recherche insensible à la casse, vous pouvez ajouter la clause COLLATE utf8mb4_bin à votre requête :

$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ? COLLATE utf8mb4_bin");

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