Menggunakan Parameter dalam SQL LIKE Statement
Apabila mencipta fungsi carian, adalah penting untuk menggunakan parameter untuk melindungi daripada ancaman suntikan SQL. Walau bagaimanapun, menggunakan parameter dalam pernyataan LIKE mungkin menimbulkan cabaran, seperti yang ditunjukkan oleh pertanyaan berikut:
SELECT * FROM compliance_corner WHERE (body LIKE '%@query%') OR (title LIKE '%@query%')
Pertanyaan ini terdedah kepada suntikan SQL kerana parameter tidak dibersihkan dengan betul. Untuk membetulkan isu ini, parameter mesti ditakrifkan dan ditetapkan dengan betul menggunakan nilai seperti:
Dim cmd as New SqlCommand( "SELECT * FROM compliance_corner"_ + " WHERE (body LIKE @query )"_ + " OR (title LIKE @query)") cmd.Parameters.Add("@query", "%" +searchString +"%")
Dalam contoh ini, parameter @query ditakrifkan menggunakan nilai searchString. Ini memastikan bahawa input pengguna, searchString, dibersihkan dengan betul dan pertanyaan dilindungi daripada suntikan SQL.
Selain itu, perlu diperhatikan bahawa pertanyaan itu mengembalikan hasil apabila dilaksanakan terus dalam SQL Server:
SELECT * FROM compliance_corner WHERE (body LIKE '%max%') OR (title LIKE '%max%')
Ini kerana pertanyaan dilaksanakan tanpa parameter, dan pernyataan LIKE membandingkan rentetan %max% secara langsung dengan kandungan lajur badan dan tajuk. Walau bagaimanapun, apabila dilaksanakan dengan parameter, pernyataan LIKE membandingkan nilai parameter, @query, dengan kandungan lajur, yang dibersihkan dengan betul, menyebabkan tiada padanan dikembalikan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Parameter dengan Selamat dengan Pernyataan SQL LIKE untuk Mencegah Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!