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!