PHP PDO Prepared Statement - MySQL LIKE Query
Dalam PHP, menggunakan pernyataan yang disediakan dengan PDO untuk pertanyaan MySQL LIKE boleh mencabar. Artikel ini menangani isu biasa yang dihadapi apabila cuba melaksanakan pertanyaan LIKE menggunakan pernyataan yang disediakan.
Pertimbangkan pertanyaan berikut:
SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE "%searchTerm%" LIMIT 25;
Pertanyaan ini berjaya mencari rentetan yang mengandungi istilah carian apabila dilaksanakan terus dalam klien MySQL. Walau bagaimanapun, apabila menterjemah pertanyaan ini kepada PDO dengan pernyataan yang disediakan, keputusan tidak dikembalikan.
Kod PHP yang disediakan menggambarkan percubaan yang gagal untuk melaksanakan pertanyaan LIKE menggunakan pelbagai sintaks. Isunya terletak pada sintaks yang digunakan untuk menentukan istilah carian dalam pernyataan yang disediakan.
Percubaan yang salah termasuk:
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
Pendekatan yang betul ialah menggunakan sintaks berikut:
$prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
Penjelasan:
Disediakan pernyataan tidak melakukan penggantian rentetan mudah. Data dipindahkan secara berasingan daripada pertanyaan, menjadikan petikan tidak diperlukan apabila membenamkan nilai. Sebut harga hanya diperlukan apabila nilai sebut harga sebenar perlu dimasukkan ke dalam pertanyaan.
Atas ialah kandungan terperinci Bagaimana Menggunakan Pernyataan PDO yang Disediakan dengan betul dengan MySQL LIKE Queries?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!