Mengapakah Saya Perlu Melarikan Diri secara Berbeza dalam Klausa WHERE dan LIKE MySQL?

Barbara Streisand
Lepaskan: 2024-11-01 20:10:02
asal
338 orang telah melayarinya

Why Do I Need to Escape Slashes Differently in MySQL's WHERE and LIKE Clauses?

Mengapa Escape Slash () Berbeza untuk Klausa WHERE dan LIKE MySQL?

Dalam MySQL, mengendalikan garis miring () dalam pertanyaan boleh mengelirukan. Pertimbangkan pertanyaan berikut:

<code class="sql">(SELECT * FROM `titles` where title = 'test\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\')</code>
Salin selepas log masuk

Anda mungkin menjangkakan bahawa pertanyaan kedua, menggunakan klausa LIKE, akan memerlukan garis miring ke belakang tambahan untuk melepaskan garis miring asal dalam "ujian". Walau bagaimanapun, keputusan menunjukkan bahawa kedua-dua pertanyaan berjaya mengembalikan baris yang sama, dengan "ujian" sebagai tajuk.

Percanggahan timbul kerana kelakuan MySQL dengan aksara melarikan diri dalam klausa WHERE dan LIKE. Dalam klausa WHERE, sengkang terbalik berfungsi sebagai watak melarikan diri, melindungi aksara khas daripada ditafsirkan secara literal. Sebaliknya, dalam klausa LIKE, garis miring ke belakang ialah aksara melarikan diri lalai, membolehkan anda melarikan diri daripada aksara lain dalam corak carian.

Seperti yang dinyatakan dalam manual MySQL untuk LIKE:

Oleh itu, manakala garis sengkang ke belakang dalam "ujian" dilepaskan secara automatik semasa menghuraikan klausa WHERE, ia mesti digandakan secara eksplisit (untuk "menguji\") untuk klausa LIKE agar sepadan dengan jujukan melarikan diri yang dimaksudkan.

Sebagai alternatif, anda boleh menentukan aksara melarikan diri yang berbeza untuk LIKE, seperti yang ditunjukkan dalam pertanyaan yang diubah suai berikut:

<code class="sql">SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'</code>
Salin selepas log masuk

Dengan menggantikan garis miring ke belakang dengan watak paip sebagai watak melarikan diri, anda boleh mencari "ujian" literal dengan tepat tanpa menggandakan garis miring ke belakang.

Atas ialah kandungan terperinci Mengapakah Saya Perlu Melarikan Diri secara Berbeza dalam Klausa WHERE dan LIKE MySQL?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!