Rumah > pembangunan bahagian belakang > tutorial php > Mengapa `addcslashes` Escape Menggariskan Berbeza dalam MySQL?

Mengapa `addcslashes` Escape Menggariskan Berbeza dalam MySQL?

Barbara Streisand
Lepaskan: 2024-11-08 15:24:02
asal
1085 orang telah melayarinya

Why Does `addcslashes` Escape Underscores Differently in MySQL?

Melepaskan Kad Liar MySQL: Menyelesaikan Misteri Garis Bawah

Dalam MySQL, kad bebas dan aksara khas seperti garis bawah (_) dan tanda peratus (% ) boleh mencipta cabaran melarikan diri apabila input pengguna dihantar ke pangkalan data. Fungsi PHP mysql_real_escape_string mengendalikan kebanyakan keperluan melarikan diri, tetapi ia tidak meluas hingga _ dan %. Atas sebab ini, sesetengah mungkin menggunakan addcslashes untuk melarikan diri lagi daripada aksara ini.

Walau bagaimanapun, isu yang membingungkan timbul: apabila input pengguna menyertakan garis bawah, menjalankannya melalui addcslashes tidak menghasilkan garis bawah yang terlepas apabila input adalah diambil daripada pangkalan data. Sebagai contoh, jika "test_test " ' dihantar dan kemudian diambil semula, hasilnya menunjukkan "test_test " '" dengan garis bawah yang dilepaskan. Persoalannya, mengapa garis bawah dilarikan secara berbeza daripada aksara lain yang dilarikan menggunakan kaedah yang sama?

Jawapannya terletak pada fakta bahawa _ dan % bukan kad bebas dalam penggunaan MySQL secara umum Ia hanya menjadi istimewa apabila digunakan dalam penyataan LIKE, di mana ia mesti dilepaskan untuk memadankan bentuk literalnya. Untuk melepaskan aksara untuk digunakan dalam penyataan LIKE, proses pelarian bersarang mesti digunakan.

Pertama, rentetan itu mestilah LIKE-melarikan diri dalam konteks ini, _. dan % adalah istimewa dan mesti dilepaskan secara eksplisit, bersama-sama dengan watak melarikan diri itu sendiri. Peringkat ini harus dilakukan walaupun menggunakan parameter pertanyaan.

Setelah pelarian LIKE selesai, rentetan itu mesti dilepaskan semula untuk penggunaan rentetan biasa di luar SQL Di sinilah mysql_real_escape_string dimainkan.

Kekeliruan timbul kerana MySQL menggunakan a. garis miring ke belakang () sebagai watak melarikan diri untuk kedua-dua peringkat melarikan diri. Untuk menggambarkan, untuk mencari padanan tepat bagi tanda peratus dalam penyata SUKA, rentetan tersebut perlu dilepaskan dengan segaris ke belakang dua kali: `SUKA 'sesuatu%''. Walau bagaimanapun, ANSI SQL menetapkan bahawa dalam literal rentetan, garis miring ke belakang mewakili garis miring ke belakang literal dan aksara petikan (') hendaklah dilepaskan dan bukannya garis miring ke belakang.

Untuk mengelakkan isu khusus platform, disyorkan untuk mengatasi kelakuan lalai melarikan diri dalam LIKE penyataan dan tentukan aksara pelarian tersuai menggunakan konstruk LIKE ... ESCAPE ....

Atas ialah kandungan terperinci Mengapa `addcslashes` Escape Menggariskan Berbeza dalam 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