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
794 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!

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