Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengparameterkan Pertanyaan SQL dengan Klausa LIKE dan IN dengan betul?

Bagaimana untuk Mengparameterkan Pertanyaan SQL dengan Klausa LIKE dan IN dengan betul?

Mary-Kate Olsen
Lepaskan: 2024-12-30 07:00:11
asal
348 orang telah melayarinya

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

Pertanyaan Berparameter dengan Syarat LIKE dan IN

Satu halangan biasa dalam pertanyaan berparameter ialah mengendalikan keadaan kompleks yang melibatkan klausa IN dan LIKE. Dalam senario sedemikian, adalah penting untuk memastikan sintaks yang betul digunakan untuk mencapai parameterisasi dan keberkesanan.

Pertimbangkan senario berikut:

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;
Salin selepas log masuk

Di sini, matlamatnya adalah untuk membina pertanyaan yang mendapatkan semula produk berdasarkan senarai ID kategori yang dipisahkan koma (CategoryIDs) dan rentetan (Nama) yang mungkin mengandungi aksara khas. Walau bagaimanapun, kod di atas tidak akan berfungsi dengan betul kerana:

  • CategoryIDs salah diberikan kepada kedua-dua SqlDbType.Int dan SqlDbType.String.
  • Nama diberikan kepada SqlDbType.Int, yang mana adalah. tidak betul untuk a rentetan.
  • Aksara khas dalam Nama tidak akan dikendalikan dengan betul.

Sintaks yang betul memerlukan pendekatan berbilang langkah:

  1. Buat Nama Parameter Individu: Bina senarai nama parameter untuk setiap ID kategori, seperti @p0, @p1, @pN-1.
  2. Tambah Parameter pada Perintah: Lelaran melalui ID kategori, mencipta dan menambah parameter untuk setiap satu menggunakan nama parameter yang sepadan.
  3. Bina Padanan Fuzzy untuk Nama: Gabungkan % di sekeliling parameter Nama dalam rentetan pertanyaan untuk mendayakan fuzzy carian.

Kod berikut menunjukkan pendekatan yang disemak:

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";
Salin selepas log masuk

Kod ini menghasilkan pertanyaan berparameter sepenuhnya yang memenuhi keperluan kedua-dua syarat IN dan LIKE.

Atas ialah kandungan terperinci Bagaimana untuk Mengparameterkan Pertanyaan SQL dengan Klausa LIKE dan IN dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan