首頁 > 資料庫 > mysql教程 > 如何安全地使用列表作為 SQL IN 語句的 Sql 參數?

如何安全地使用列表作為 SQL IN 語句的 Sql 參數?

Patricia Arquette
發布: 2024-12-28 07:05:23
原創
887 人瀏覽過

How to Safely Use a List as a SqlParameter for an SQL IN Statement?

翻譯清單插入SQL IN 語句的SqlParameter

包含在查詢中的「IN」語句指定特定列必須在提供的值列表中具有匹配的值。當使用 SqlCommand 物件處理 SQL IN 語句時,可能會出現關於 List 和 List 的轉換的混亂。

在提供的程式碼片段中:

cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingsList));

reader = cmd.ExecuteReader();
登入後複製

參數settingsList代表一個List;包含要在 IN 語句中計算的值。然而,List的直接映射是可行的。由於與已知提供者類型不相容,SqlParameter 會引發異常。

要使用SqlCommands 安全地執行IN 查詢,請考慮採用以下方法:

  1. 建構語句佔位符
string sql = "SELECT dscr FROM system_settings WHERE setting IN ({0})";
登入後複製

在此語句中,{0} 作為下一步產生的動態參數清單的佔位符。
  1. 準備參數數組
  2. :
string[] paramArray = settingList.Select((x, i) => "@settings" + i).ToArray();
登入後複製

這裡,字串陣列paramArray 是透過迭代settingsList 並將每個值分配給以下形式的命名參數而派生的"@settings0", "@settings1"等
  1. 將語句與參數組合
  2. :
cmd.CommandText = string.Format(sql, string.Join(",", paramArray));
登入後複製

Format 方法組合語句有參數清單的模板,產生參數化 SQL
  1. 新增參數
  2. :
for (int i = 0; i < settingList.Count; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@settings" + i, settingList[i]));
}
登入後複製

使用循環遍歷settingsList 以確保將個別參數新增至SqlCommand 物件中每個值都有對應的參數。

透過以下步驟,您可以有效地執行 IN 查詢與使用 List 的 SqlCommand 物件一起使用作為輸入,同時維護資料安全並防止潛在的注入攻擊。

以上是如何安全地使用列表作為 SQL IN 語句的 Sql 參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板