ホームページ > データベース > mysql チュートリアル > SQL IN ステートメントの SqlParameter としてリストを安全に使用する方法

SQL IN ステートメントの SqlParameter としてリストを安全に使用する方法

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 の変換に関して混乱が生じる可能性があります。互換性のある SqlParameter に変換します。

提供されたコード スニペット内:

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. Construct Statement with Placeholders:
string sql = "SELECT dscr FROM system_settings WHERE setting IN ({0})";
ログイン後にコピー

このステートメントでは、{0} は次のステップで生成される動的パラメーター リストのプレースホルダーとして機能します。

  1. パラメータの準備Array:
string[] paramArray = settingList.Select((x, i) => "@settings" + i).ToArray();
ログイン後にコピー

ここで、文字列配列 paramArray は、settingsList を反復処理し、各値を "@settings0"、"@settings1" という形式の名前付きパラメーターに割り当てることによって導出されます。 、など

  1. ステートメントを組み合わせるパラメータ:
cmd.CommandText = string.Format(sql, string.Join(",", paramArray));
ログイン後にコピー

Format メソッドはステートメント テンプレートとパラメータ リストを結合し、パラメータ化された SQL ステートメントを生成します。

  1. パラメータの追加:
for (int i = 0; i < settingList.Count; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@settings" + i, settingList[i]));
}
ログイン後にコピー

個別パラメータ

これらの手順に従うことで、List< を使用して SqlCommand オブジェクトで IN クエリを効率的に実行できます。文字列>データのセキュリティを維持し、潜在的なインジェクション攻撃を防止しながら、入力として使用できます。

以上がSQL IN ステートメントの SqlParameter としてリストを安全に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート