Maison >base de données >tutoriel mysql >Comment utiliser en toute sécurité une liste comme SqlParameter pour une instruction SQL IN ?

Comment utiliser en toute sécurité une liste comme SqlParameter pour une instruction SQL IN ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-28 07:05:23951parcourir

How to Safely Use a List as a SqlParameter for an SQL IN Statement?

Traduire une liste dans un SqlParameter pour une instruction SQL IN

Incluse dans la requête, une instruction "IN" spécifie qu'une colonne spécifique doit avoir une valeur correspondante dans une liste de valeurs fournie. Lorsque vous travaillez avec des instructions SQL IN utilisant un objet SqlCommand, une confusion peut survenir concernant la conversion d'un objet List dans un SqlParameter compatible.

Dans l'extrait de code fourni :

cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingsList));

reader = cmd.ExecuteReader();

Le paramètre settingsList représente une List contenant les valeurs à évaluer dans l'instruction IN. Cependant, un mappage direct de la propriété List à un SqlParameter induit une exception en raison d'une incompatibilité avec les types de fournisseurs connus.

Pour exécuter en toute sécurité une requête IN avec SqlCommands, envisagez d'utiliser l'approche suivante :

  1. Instruction de construction avec Espaces réservés :
string sql = "SELECT dscr FROM system_settings WHERE setting IN ({0})";

Dans cette déclaration, {0} sert d'espace réservé pour la liste de paramètres dynamiques générée à l'étape suivante.

  1. Préparer le tableau de paramètres :
string[] paramArray = settingList.Select((x, i) => "@settings" + i).ToArray();

Ici , le tableau de chaînes paramArray est dérivé en parcourant la settingsList et en attribuant chaque valeur à un paramètre nommé de la forme "@settings0", "@settings1", etc.

  1. Combiner l'instruction avec les paramètres :
cmd.CommandText = string.Format(sql, string.Join(",", paramArray));

La méthode Format combine le modèle d'instruction avec la liste de paramètres , ce qui donne lieu à une instruction SQL paramétrée.

  1. Ajouter Paramètres :
for (int i = 0; i < settingList.Count; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@settings" + i, settingList[i]));
}

Des paramètres individuels sont ajoutés à l'objet SqlCommand à l'aide d'une boucle qui parcourt la settingsList pour garantir que chaque valeur a un paramètre correspondant.

Par en suivant ces étapes, vous pouvez effectuer efficacement une requête IN avec un objet SqlCommand à l'aide d'un objet List comme entrée tout en préservant la sécurité des données et en empêchant les attaques potentielles par injection.

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