ホームページ > データベース > mysql チュートリアル > LIKE 句と IN 句を使用して SQL クエリを適切にパラメータ化する方法

LIKE 句と IN 句を使用して SQL クエリを適切にパラメータ化する方法

Mary-Kate Olsen
リリース: 2024-12-30 07:00:11
オリジナル
348 人が閲覧しました

How to Properly Parameterize SQL Queries with LIKE and IN Clauses?

LIKE 条件と IN 条件を使用したパラメータ化されたクエリ

パラメータ化されたクエリにおける一般的な障害の 1 つは、IN 句と LIKE 句を含む複雑な条件の処理です。このようなシナリオでは、パラメータ化と有効性の両方を達成するために正しい構文が使用されていることを確認することが重要です。

次のシナリオを考えてみましょう:

SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID IN (@categoryids) 
      OR  name LIKE '%@name%'
", 
   conn);
comm.Parameters.Add("@categoryids", SqlDbType.Int);
comm.Parameters["@categoryids"].Value = CategoryIDs;
comm.Parameters.Add("@name", SqlDbType.Int);
comm.Parameters["@name"].Value = Name;
ログイン後にコピー

ここでの目標は、クエリを構築することです。カテゴリ ID (CategoryID) と特殊文字を含む可能性のある文字列 (Name) のカンマ区切りリストに基づいて製品を取得します。ただし、次の理由により、上記のコードは正しく機能しません。

  • CategoryIDs が SqlDbType.Int と SqlDbType.String の両方に誤って割り当てられています。
  • Name が SqlDbType.Int に割り当てられています。文字列としては正しくありません。
  • 名前の特殊文字は処理されません

正しい構文には、複数のステップからなるアプローチが必要です。

  1. 個別のパラメータ名の作成: カテゴリごとにパラメータ名のリストを作成します。 ID(@p0、@p1、など) @pN-1.
  2. コマンドにパラメータを追加: カテゴリ ID を反復処理し、対応するパラメータ名を使用してカテゴリ ID ごとにパラメータを作成および追加します。
  3. Construct Fuzzy Match for Name: クエリ文字列の Name パラメータの周囲に % を連結して、あいまいを有効にします

次のコードは、改訂されたアプローチを示しています。

string Name = "someone";
int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617,
                                1618, 1619, 1620, 1951, 1952,
                                1953, 1954, 1955, 1972, 2022 };

SqlCommand comm = conn.CreateCommand();

string[] parameters = new string[categoryIDs.Length];
for(int i=0;i<categoryIDs.Length;i++)
{
   parameters[i] = "@p"+i;
   comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]);
}
comm.Parameters.AddWithValue("@name",$"%{Name}%");
comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN (";
comm.CommandText += string.Join(",", parameters) + ")";
comm.CommandText += " OR name LIKE @name";
ログイン後にコピー

このコードは、IN 条件と LIKE 条件の両方の要件を満たす完全にパラメーター化されたクエリを生成します。

以上がLIKE 句と IN 句を使用して SQL クエリを適切にパラメータ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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