Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melarikan Diri Kad Liar MySQL dengan betul dalam Klausa LIKE?
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?
_ 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:
String literal melarikan diri:
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 ...";
atau dengan parameter dalam PDO:
$q= $db->prepare("... WHERE name LIKE ? ESCAPE '=' AND ..."); $q->bindValue(1, '%'.like($name, '=').'%', PDO::PARAM_STR);
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!