Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh memarameterkan klausa SQL dengan selamat dengan bilangan argumen yang dinamik?

Bagaimanakah saya boleh memarameterkan klausa SQL dengan selamat dengan bilangan argumen yang dinamik?

Linda Hamilton
Lepaskan: 2025-01-25 16:36:10
asal
806 orang telah melayarinya

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

Gunakan bilangan parameter dinamik ke parameter SQL dalam klausa

Parameter SQL Query membantu mencegah SQL daripada menyuntik serangan. Walau bagaimanapun, apabila memproses parameter pembolehubah, kaedah tradisional (parameterisasi setiap parameter berasingan dalam klausa) mungkin menjadi sangat rumit.

parameterisasi setiap nilai

Penyelesaian yang lebih elegan adalah setiap nilai yang mungkin dalam parameter dalam klausa. Sebagai contoh, pertimbangkan pertanyaan berikut:

<code class="language-sql">SELECT * FROM Tags WHERE Name IN ('ruby','rails','scruffy','rubyonrails') ORDER BY Count DESC</code>
Salin selepas log masuk
Untuk parameterkan pertanyaan ini, anda boleh memperuntukkan setiap nilai ke array dan membuat parameter dalam klausa:

<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>
Salin selepas log masuk
Perintah yang dihasilkan oleh kaedah ini mengandungi parameter dan nilai nama dan nilai yang dihasilkan dinamik:

<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>
Salin selepas log masuk
langkah berjaga -jaga keselamatan

Harus diingat bahawa kaedah ini dengan selamat dapat menghalang SQL daripada menyuntik serangan, kerana nilai parameterisasi tidak dimasukkan oleh pengguna. Satu -satunya teks yang disuntik ke dalam commandtext adalah awalan "@tag" yang dikodkan keras dan indeks array.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memarameterkan klausa SQL dengan selamat dengan bilangan argumen yang dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan