ホームページ > データベース > mysql チュートリアル > 動的な引数を使用して SQL IN 句を安全にパラメータ化するにはどうすればよいですか?

動的な引数を使用して SQL IN 句を安全にパラメータ化するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-25 16:36:10
オリジナル
807 人が閲覧しました

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

句のパラメーターSQLに動的パラメーターの数を使用

パラメーターSQLクエリは、SQLが攻撃を注入するのを防ぐのに役立ちます。ただし、変数のパラメーターを処理する場合、従来の方法(句内の各個別のパラメーターのパラメーター化)は非常に面倒になる場合があります。

値ごとのパラメーター化

よりエレガントなソリューションは、句でパラメーター化されたすべての可能な値です。たとえば、次のお問い合わせを検討してください

このクエリをパラメーター化するには、各値を配列に割り当てて、句にパラメーター化されたパラメーターを作成できます。

この方法で生成されたコマンドには、動的生成された名前と値のパラメーターと値が含まれています。
<code class="language-sql">SELECT * FROM Tags WHERE Name IN ('ruby','rails','scruffy','rubyonrails') ORDER BY Count DESC</code>
ログイン後にコピー

安全上の注意

<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>
ログイン後にコピー
この方法は、パラメーター化値がユーザーから入力されないため、SQLが攻撃を注入するのを安全に防ぐことができることに注意する必要があります。コマンドテキストに注入された唯一のテキストは、ハードコードされた「@TAG」プレフィックスと、これらがユーザーによって生成されないため、安全です。

以上が動的な引数を使用して SQL IN 句を安全にパラメータ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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