Maison > base de données > tutoriel mysql > Comment paramétrer correctement les requêtes SQL avec les clauses LIKE et IN ?

Comment paramétrer correctement les requêtes SQL avec les clauses LIKE et IN ?

Mary-Kate Olsen
Libérer: 2024-12-30 07:00:11
original
348 Les gens l'ont consulté

How to Properly Parameterize SQL Queries with LIKE and IN Clauses?

Requêtes paramétrées avec des conditions LIKE et IN

Un obstacle courant dans les requêtes paramétrées est la gestion de conditions complexes impliquant des clauses IN et LIKE. Dans de tels scénarios, il est crucial de s'assurer que la syntaxe correcte est utilisée pour obtenir à la fois le paramétrage et l'efficacité.

Considérez le scénario suivant :

SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID IN (@categoryids) 
      OR  name LIKE '%@name%'
", 
   conn);
comm.Parameters.Add("@categoryids", SqlDbType.Int);
comm.Parameters["@categoryids"].Value = CategoryIDs;
comm.Parameters.Add("@name", SqlDbType.Int);
comm.Parameters["@name"].Value = Name;
Copier après la connexion

Ici, l'objectif est de construire une requête qui récupère les produits en fonction d'une liste d'ID de catégorie (CategoryIDs) séparés par des virgules et d'une chaîne (Name) pouvant contenir des caractères spéciaux. Cependant, le code ci-dessus ne fonctionnera pas correctement car :

  • CategoryIDs est incorrectement attribué à SqlDbType.Int et SqlDbType.String.
  • Le nom est attribué à SqlDbType.Int, qui est incorrect pour une chaîne.
  • Les caractères spéciaux dans Nom ne seront pas traités correctement.

La syntaxe correcte nécessite une approche en plusieurs étapes :

  1. Créer des noms de paramètres individuels : Construire une liste de noms de paramètres pour chaque catégorie ID, tel que @p0, @p1, @pN-1.
  2. Ajouter des paramètres à Commande : Parcourez les ID de catégorie, en créant et en ajoutant un paramètre pour chacun en utilisant le nom du paramètre correspondant.
  3. Construisez une correspondance floue pour le nom : Concaténez % autour du paramètre Nom dans la chaîne de requête pour activer la recherche floue.

Le code suivant illustre la version révisée approche :

string Name = "someone";
int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617,
                                1618, 1619, 1620, 1951, 1952,
                                1953, 1954, 1955, 1972, 2022 };

SqlCommand comm = conn.CreateCommand();

string[] parameters = new string[categoryIDs.Length];
for(int i=0;i<categoryIDs.Length;i++)
{
   parameters[i] = "@p"+i;
   comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]);
}
comm.Parameters.AddWithValue("@name",$"%{Name}%");
comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN (";
comm.CommandText += string.Join(",", parameters) + ")";
comm.CommandText += " OR name LIKE @name";
Copier après la connexion

Ce code produit une requête entièrement paramétrée qui satisfait aux exigences des conditions IN et LIKE.

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