Rumah > pembangunan bahagian belakang > tutorial php > Mengapa MySQL Escaping Wildcards Berkelakuan Tidak Dijangka?

Mengapa MySQL Escaping Wildcards Berkelakuan Tidak Dijangka?

DDD
Lepaskan: 2024-11-07 08:25:03
asal
840 orang telah melayarinya

Why is MySQL Escaping Wildcards Behaving Unexpectedly?

Memahami MySQL Escaping for Wild Cards

Masalah:

Semasa melarikan diri dari input pengguna menggunakan mysql_real_escape_string, output dalam MySQL menunjukkan tingkah laku yang tidak dijangka dengan watak tertentu. Khususnya, watak garis bawah didahului dengan garis miring ke belakang, manakala petikan tunggal dan berganda tidak.

Penjelasan:

Bertentangan dengan andaian, dan % adalah bukan kad bebas MySQL dalam penggunaan umum dan tidak boleh dilepaskan apabila memasukkannya ke dalam literal rentetan. mysql_real_escape_string sudah memadai untuk tujuan ini dan menambahkan addcslashes untuk dan % harus dielakkan.

Wildcard hanya menjadi relevan dalam konteks padanan LIKE. Apabila menyatakan rentetan sebagai ungkapan SUKA literal, lapisan pelarian tambahan diperlukan di mana _ dan % mesti dilepaskan. Ini dilakukan secara berasingan daripada rentetan umum yang melarikan diri menggunakan aksara sengkang ke belakang yang sama.

Penyelesaian:

Untuk pemadanan LIKE, ikut langkah berikut:

  1. Gunakan LIKE escaping, di mana _ dan % mesti dilepaskan, dan watak escape juga mesti dilepaskan.
  2. Lakukan pelarian rentetan umum menggunakan mysql_real_escape_string dalam MySQL atau fungsi yang sesuai untuk pangkalan data lain.

Contoh:

Untuk memadankan tanda peratus literal, dwi-slash-escape ia dalam LIKE escape (cth., LIKE 'sesuatu\%' dalam MySQL) atau gunakan escape lain watak dengan LIKE ... ESCAPE ... bina untuk mudah alih.

Fungsi Escape LIKE Mudah Alih:

function like($s, $e) {
    return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s);
}
Salin selepas log masuk

Contoh dengan Parameter:

$escapedname = mysql_real_escape_string(like($name, '='));
$query = "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ...";
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa MySQL Escaping Wildcards Berkelakuan Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan