Parametrierte SQL-Abfragen tragen dazu bei, SQL-Injection-Angriffe zu verhindern. Beim Umgang mit einer variablen Anzahl von Argumenten kann der herkömmliche Ansatz (Parametrisierung jedes einzelnen Arguments in einer IN-Klausel) jedoch umständlich werden.
Eine elegantere Lösung besteht darin, jeden möglichen Wert in der IN-Klausel zu parametrisieren. Betrachten Sie beispielsweise die folgende Abfrage:
<code class="language-sql">SELECT * FROM Tags WHERE Name IN ('ruby','rails','scruffy','rubyonrails') ORDER BY Count DESC</code>
Um diese Abfrage zu parametrisieren, können Sie jeden Wert einem Array zuweisen und eine parametrisierte IN-Klausel erstellen:
<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>
Der von dieser Methode generierte Befehl enthält Parameter mit dynamisch generierten Namen und Werten:
<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>
Es ist wichtig zu beachten, dass diese Methode vor SQL-Injection-Angriffen sicher ist, da die parametrisierten Werte nicht vom Benutzer eingegeben werden. Der einzige in den CommandText eingefügte Text ist das hartcodierte „@tag“-Präfix und der Index im Array, die nicht vom Benutzer generiert werden und daher sicher sind.
Das obige ist der detaillierte Inhalt vonWie kann ich eine SQL IN-Klausel mit einer dynamischen Anzahl von Argumenten sicher parametrisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!