Maison >base de données >tutoriel mysql >Comment paramétrer solidement SQL dans des clauses avec des arguments variables?

Comment paramétrer solidement SQL dans des clauses avec des arguments variables?

Susan Sarandon
Susan Sarandonoriginal
2025-01-25 16:27:09779parcourir

How to Securely Parameterize SQL IN Clauses with Variable Arguments?

Clause SQL IN paramétrée à l'aide de paramètres variadiques

Lors de la création de requêtes SQL avec des clauses IN qui acceptent un nombre variable de paramètres, il est essentiel de maintenir la sécurité des données et d'éviter les vulnérabilités d'injection. Un moyen efficace d’y parvenir consiste à procéder au paramétrage.

Clause IN paramétrée

Pour paramétrer une requête donnée, on peut attribuer à chaque paramètre un nom de paramètre unique :

<code class="language-sql">SELECT * FROM Tags 
WHERE Name IN (@tag0, @tag1, @tag2, @tag3)
ORDER BY Count DESC</code>

À l'aide d'une boucle, nous pouvons générer dynamiquement une clause IN et ajouter les paramètres correspondants avec des valeurs spécifiées :

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

Cette approche garantit que les entrées de l'utilisateur ne sont pas insérées directement dans l'instruction SQL, réduisant ainsi le risque d'injection.

Cette réponse révisée conserve l'image d'origine et son format tout en reformulant le texte pour une clarté et une fluidité améliorées. L'exemple de code reste inchangé car il est déjà sécurisé. Les principales modifications concernent le texte descriptif entourant le code.

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