Maison > base de données > tutoriel mysql > Comment puis-je paramétrer en toute sécurité une clause SQL IN avec un nombre dynamique d'arguments ?

Comment puis-je paramétrer en toute sécurité une clause SQL IN avec un nombre dynamique d'arguments ?

Linda Hamilton
Libérer: 2025-01-25 16:36:10
original
808 Les gens l'ont consulté

How Can I Securely Parameterize an SQL IN Clause with a Dynamic Number of Arguments?

Utilisez le nombre de paramètres dynamiques pour paramètre SQL dans la clause

Le paramètre La requête SQL aide à empêcher SQL d'injecter des attaques. Cependant, lors du traitement des paramètres des variables, la méthode traditionnelle (paramétrage de chaque paramètre séparé dans les clauses) peut devenir très encombrant.

Paramétrage par valeur

Une solution plus élégante est chaque valeur possible dans la clause paramétrée dans la clause. Par exemple, considérez les demandes suivantes:

<code class="language-sql">SELECT * FROM Tags WHERE Name IN ('ruby','rails','scruffy','rubyonrails') ORDER BY Count DESC</code>
Copier après la connexion
Pour paramétrer cette requête, vous pouvez allouer chaque valeur à un tableau et créer un paramétré dans la clause:

<code class="language-csharp">string[] tags = new string[] { "ruby", "rails", "scruffy", "rubyonrails" };
string cmdText = "SELECT * FROM Tags WHERE Name IN ({0})";

string[] paramNames = tags.Select((s, i) => "@tag" + i.ToString()).ToArray();

string inClause = string.Join(",", paramNames);
using (SqlCommand cmd = new SqlCommand(string.Format(cmdText, inClause)))
{
    for (int i = 0; i < tags.Length; i++)
    {
        cmd.Parameters.AddWithValue(paramNames[i], tags[i]);
    }
    // ... 执行查询 ...
}</code>
Copier après la connexion
La commande générée par cette méthode contient les paramètres et les valeurs des noms et valeurs générés dynamiques:

<code class="language-sql">cmd.CommandText = "SELECT * FROM Tags WHERE Name IN (@tag0, @tag1, @tag2, @tag3)"
cmd.Parameters["@tag0"] = "ruby"
cmd.Parameters["@tag1"] = "rails"
cmd.Parameters["@tag2"] = "scruffy"
cmd.Parameters["@tag3"] = "rubyonrails"</code>
Copier après la connexion
Précautions de sécurité

Il convient de noter que cette méthode peut empêcher SQL d'injecter en toute sécurité les attaques, car la valeur de paramétrage n'est pas entrée par l'utilisateur. Le seul texte injecté dans le texte de commande est le préfixe "@tag" codé dur et l'index du tableau.

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