PHP PDO Prepared Statement - MySQL LIKE Query
Isu:
Apabila melaksanakan pertanyaan MySQL LIKE menggunakan PDO PHP, carian tidak mengembalikan hasil.
Pertanyaan:
<code class="sql">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;</code>
Kod PHP:
<code class="php">$sql = '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'; $prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>
Penyelesaian:
Kesilapan terletak pada nilai yang diberikan kepada parameter :searchTerm dalam kaedah execute(). Petikan berganda tidak diperlukan apabila menggunakan pernyataan yang disediakan.
Kod PHP yang Dibetulkan:
<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
Penjelasan:
Pernyataan yang disediakan mengendalikan data berasingan daripada pertanyaan. Mereka tidak melakukan penggantian rentetan. Petikan hanya ditambah apabila membenamkan nilai terus ke dalam pertanyaan.
Atas ialah kandungan terperinci Mengapakah penyataan PHP PDO saya disediakan dengan pertanyaan MySQL LIKE tidak mengembalikan hasil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!