Escapering Backslash dalam MySQL: Penggunaan dalam WHERE dan LIKE Klausa
Pertimbangkan pertanyaan berikut yang mencari tajuk yang mengandungi backslash:
(SELECT * FROM `titles` WHERE title = 'test\') UNION ALL (SELECT * FROM `titles` WHERE title LIKE 'test\\')
Output menunjukkan bahawa garis miring ke belakang tidak terlepas dalam klausa MANA. Walau bagaimanapun, garis miring ke belakang tambahan diperlukan untuk klausa LIKE.
Mengapa Perbezaannya?
Dalam MySQL, garis miring ke belakang () berfungsi sebagai aksara melarikan diri dalam LIKE secara lalai. Menurut manual MySQL untuk LIKE:
"Oleh kerana MySQL menggunakan sintaks C escape dalam rentetan... anda mesti menggandakan mana-mana '' yang anda gunakan dalam rentetan LIKE. Contohnya, untuk mencari 'n', nyatakan ia sebagai 'n'. Untuk mencari '', tentukan ia sebagai '\' ini kerana garis miring ke belakang dilucutkan sekali oleh penghurai dan sekali lagi apabila padanan corak dibuat, meninggalkan satu garis miring ke belakang untuk dipadankan terhadap."
Escaping Backslashes
Walau bagaimanapun, MySQL menyediakan keupayaan untuk menukar aksara melarikan diri menggunakan kata kunci ESCAPE. Sebagai contoh, pertanyaan berikut akan menggunakan aksara paip (|) sebagai aksara melarikan diri:
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
Dengan pertanyaan ini, hanya satu garis miring ke belakang diperlukan dalam klausa LIKE, kerana aksara paip akan digunakan untuk melarikan diri.
Atas ialah kandungan terperinci Mengapa Klausa WHERE dan LIKE MySQL Memerlukan Melarikan Segaris Ke Belakang yang berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!