Dalam persekitaran di mana pernyataan yang disediakan bukan pilihan, adalah penting untuk melepaskan input pengguna secara menyeluruh sebelum menyerahkannya kepada MySQL untuk mengelakkan suntikan SQL. Fungsi mysql_real_escape_string PHP biasanya digunakan untuk tujuan ini, tetapi ia tidak dapat melepaskan aksara kad liar MySQL '%' dan '_'.
Untuk mengambil kira perkara ini, addcslash boleh digunakan sebagai tambahan. Walau bagaimanapun, seperti yang diperhatikan oleh pengguna, apabila input yang mengandungi kad liar dihantar ke pangkalan data dan diambil, terdapat percanggahan dalam hasil yang dipaparkan.
The Escaping Enigma
Pengguna mengalami gelagat pelik di mana aksara '_' diawali dengan garis miring ke belakang ('_'), manakala '"' dan aksara "'" tidak, walaupun ketiga-tiganya dilepaskan dengan '' Ini menimbulkan persoalan: mengapa aksara ini dikendalikan secara berbeza?
Memahami Konteks MySQL
Kunci untuk menyelesaikan teka-teki ini terletak pada pemahaman konteks padanan LIKE dalam MySQL '_' dan '%' tidak dianggap sebagai kad liar dalam penggunaan MySQL umum dan sepatutnya tidak boleh dilepaskan apabila membina rentetan literal mysql_real_escape_string menangani keperluan escape untuk tujuan ini.
Walau bagaimanapun, apabila menyediakan rentetan untuk digunakan dalam pernyataan LIKE, set peraturan pelarian yang berbeza digunakan untuk memastikan bahawa literal ditafsirkan dengan betul, pelarian LIKE tambahan diperlukan.
Escape Berganda Dilema
Dalam konteks padanan LIKE, '_' dan '%' menjadi aksara khas. MySQL menggunakan garis miring ke belakang ('') sebagai aksara melarikan diri untuk kedua-dua langkah LIKE-escaping dan rentetan literal-escaping. Ini boleh membawa kepada kekeliruan, seperti yang ditunjukkan oleh contoh pengguna yang memadankan tanda peratusan literal dengan SUKA memerlukan pelarian segaris ke belakang dua kali.
Escape LIKE yang Betul
Untuk mengelakkan kemudahalihan isu, ANSI SQL menentukan penggunaan aksara melarikan diri yang ditetapkan untuk pernyataan LIKE. Satu cara untuk mencapai ini dalam PHP ialah menggunakan fungsi berikut:
function like($s, $e) { return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s); }
Penggunaan dengan Penyata Disediakan
Untuk keselamatan dan mudah alih tambahan, dinasihatkan untuk menggunakan yang disediakan kenyataan apabila tersedia. Ini menghapuskan keperluan untuk melarikan diri secara manual sambil memastikan pengendalian data yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Melarikan Diri Kad Liar MySQL dengan Benar dalam Pernyataan LIKE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!