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:
SELECT * FROM Tags WHERE Name IN ('ruby','rails','scruffy','rubyonrails') ORDER BY Count DESC
Salin selepas log masuk
Untuk parameterkan pertanyaan ini, anda boleh memperuntukkan setiap nilai ke array dan membuat parameter dalam klausa:
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]);
}
// ... 执行查询 ...
}
Salin selepas log masuk
Perintah yang dihasilkan oleh kaedah ini mengandungi parameter dan nilai nama dan nilai yang dihasilkan dinamik:
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"
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!