Meloloskan Diri Aksara Khas MySQL untuk Memasukkan Pangkalan Data
Apabila memasukkan input pengguna ke dalam pangkalan data MySQL, adalah penting untuk mengelakkan potensi kelemahan dengan melarikan diri khas dengan betul watak. Fungsi PHP mysql_real_escape_string berkesan mengendalikan tugasan ini, tetapi ia tidak terlepas daripada kad bebas MySQL % dan _.
Untuk menangani perkara ini, banyak pembangun menggunakan fungsi addcslashes bersama-sama dengan mysql_real_escape_string untuk melarikan diri dari kad bebas ini juga. Walau bagaimanapun, pendekatan ini boleh membawa kepada hasil yang tidak dijangka.
Memahami Wildcard Escaping dalam MySQL
Bertentangan dengan kepercayaan umum, _ dan % tidak dianggap sebagai kad bebas dalam MySQL untuk rentetan umum literal. Ia hanya boleh dilepaskan apabila digunakan dalam pernyataan LIKE untuk padanan corak.
Hierarki Melarikan Diri
Meloloskan diri daripada aksara khas dalam konteks pernyataan LIKE melibatkan dua peringkat:
The Confusion with Double Backslashes
MySQL menggunakan aksara backslash sebagai aksara melarikan diri untuk kedua-dua LIKE escape dan rentetan melarikan diri secara literal. Ini boleh menyebabkan kekeliruan, seperti yang dilihat apabila memasukkan rentetan yang mengandungi %. Garis miring belakang dua kali mesti digunakan untuk melepaskannya untuk tujuan LIKE, dan kemudian rentetan secara keseluruhan mesti dilepaskan semula untuk sisipan literal rentetan.
ANSI SQL dan Portable LIKE Escaping
ANSI SQL mentakrifkan bahawa garis miring ke belakang dalam literal rentetan mewakili garis miring ke belakang literal dan petikan tunggal dilarikan menggunakan ''. Walau bagaimanapun, MySQL menyimpang daripada piawaian ini. Untuk memastikan kemudahalihan, adalah disyorkan untuk mengatasi tingkah laku lalai MySQL dan menentukan watak pelarian tersuai menggunakan konstruk LIKE ... ESCAPE .... Contohnya:
function like($s, $e) { return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s); } $escapedname = mysql_real_escape_string(like($name, '=')); $query = "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ...";
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melarikan Diri dengan Selamat daripada Aksara Khas MySQL, Termasuk Kad Liar, untuk Memasukkan Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!