Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Melarikan Diri dengan Selamat daripada Aksara Khas MySQL, Termasuk Kad Liar, untuk Memasukkan Pangkalan Data?

Bagaimanakah Saya Boleh Melarikan Diri dengan Selamat daripada Aksara Khas MySQL, Termasuk Kad Liar, untuk Memasukkan Pangkalan Data?

Mary-Kate Olsen
Lepaskan: 2024-12-07 07:11:11
asal
668 orang telah melayarinya

How Can I Safely Escape MySQL Special Characters, Including Wildcards, for Database Insertion?

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:

  1. LIKE Melarikan diri: Dalam kenyataan LIKE, _ dan % mesti dilepaskan, bersama-sama dengan watak melarikan diri. Watak escape itu sendiri mesti dilepaskan juga.
  2. String Literal Escaping: Selepas LIKE escape, rentetan mesti menjalani rentetan literal escape biasa berdasarkan keperluan pangkalan data tertentu. Untuk MySQL, ini dilakukan menggunakan mysql_real_escape_string.

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 ...";
Salin selepas log masuk

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!

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