Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melarikan Diri Kad Liar MySQL dengan betul dalam Klausa LIKE?

Bagaimana untuk Melarikan Diri Kad Liar MySQL dengan betul dalam Klausa LIKE?

Barbara Streisand
Lepaskan: 2024-12-02 03:54:09
asal
362 orang telah melayarinya

How to Properly Escape MySQL Wildcards in LIKE Clauses?

Melepaskan Kad Liar MySQL

Masalah

Pada pelayan lama apabila pernyataan yang disediakan tidak tersedia, melarikan diri dari input pengguna sebelum menghantarnya ke MySQL adalah penting. Walau bagaimanapun, menggunakan mysql_real_escape_string sahaja tidak melepaskan kad bebas MySQL (_ dan %) dan corak tertentu mengembalikan hasil yang tidak dijangka.

Sebagai contoh, apabila input "test_test ' dihantar, pangkalan data menunjukkan "test_test '." Mengapa adakah garis bawah mempunyai awalan sengkang ke belakang manakala petikan tunggal dan berganda tidak?

Jawapan

_ dan % bukan kad bebas dalam MySQL dan tidak boleh dilepaskan apabila dimasukkan ke dalam rentetan rentetan mysql_real_escape_string sudah memadai untuk tujuan ini.

Walau bagaimanapun. , _ dan % memerlukan pengendalian khas apabila digunakan dalam ungkapan padanan LIKE untuk memastikan ia sepadan dengan nilai literalnya sahaja, bukan corak. Ini melibatkan dua peringkat melarikan diri:

LIKE melarikan diri:

  • Meloloskan garis bawah, peratus dan sebarang aksara melarikan diri yang digunakan dalam ungkapan SUKA.
  • Ini mesti dilakukan dalam SQL, walaupun dengan parameter pertanyaan.

String literal melarikan diri:

  • Meloloskan diri daripada aksara yang digunakan dalam rentetan literal, termasuk aksara LIKE yang melarikan diri.
  • Ini dilakukan di luar SQL, contohnya, menggunakan mysql_real_escape_string.

Contoh

Untuk MySQL, jika anda ingin memadankan dengan tanda peratus literal, anda akan menggunakan melarikan diri segaris ke belakang berganda, mis., SUKAI 'sesuatu\%`.

Untuk mengelakkan kekeliruan ini dan memastikan kemudahalihan, anda boleh mengatasi watak lalai melarikan diri menggunakan LIKE ... ESCAPE ... bina.

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

atau dengan parameter dalam PDO:

$q= $db->prepare("... WHERE name LIKE ? ESCAPE '=' AND ...");
$q->bindValue(1, '%'.like($name, '=').'%', PDO::PARAM_STR);
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Melarikan Diri Kad Liar MySQL dengan betul dalam Klausa LIKE?. 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