Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine SQL IN-Klausel mit einer dynamischen Anzahl von Argumenten sicher parametrisieren?

Wie kann ich eine SQL IN-Klausel mit einer dynamischen Anzahl von Argumenten sicher parametrisieren?

Linda Hamilton
Freigeben: 2025-01-25 16:36:10
Original
808 Leute haben es durchsucht

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

Parametrieren Sie die SQL IN-Klausel mit einer dynamischen Anzahl von Parametern

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.

Parametrieren Sie jeden Wert

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Sicherheitsvorkehrungen

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage