Rumah > Artikel > pembangunan bahagian belakang > Mengapa Penyata Disediakan PDO Gagal Mengembalikan Keputusan dengan Pertanyaan LIKE?
Penyata Disediakan PDO dalam PHP: Isu dengan MySQL LIKE Queries
Kelas PDO PHP dengan MySQL menawarkan mekanisme untuk melaksanakan pernyataan SQL dengan pertanyaan berparameter , meningkatkan keselamatan dan prestasi. Walau bagaimanapun, pengguna mungkin menghadapi kesukaran apabila menggunakan pertanyaan LIKE.
Isu: Pernyataan PDO Disediakan tidak Mengembalikan Keputusan dengan Pertanyaan LIKE
Apabila cuba melaksanakan pertanyaan yang serupa dengan yang berikut menggunakan PDO:
<code class="mysql">SELECT * FROM hs WHERE hs_text LIKE "%searchTerm%"</code>
Pengguna mungkin mendapati tiada hasil yang dikembalikan.
Penyelesaian: Parameterisasi Betul
Isunya terletak pada parameterisasi yang salah daripada istilah carian. Dalam PHP, pernyataan yang disediakan menggunakan ruang letak bernama, yang memerlukan sintaks yang berbeza. Parameterisasi yang betul untuk pertanyaan LIKE ialah:
<code class="php">$prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
Penjelasan:
Pernyataan yang disediakan memisahkan data daripada pertanyaan dan gunakan ruang letak. Oleh itu, istilah carian tidak perlu dibalut dalam petikan berganda atau melakukan penggabungan rentetan.
Kesilapan Biasa Lain:
<code class="php">WHERE hs_text LIKE :searchTerm $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"')); // Incorrect</code>
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\') $ret = $prep->execute(array($searchTerm)); // Incorrect</code>
Dengan menggunakan parameterisasi yang betul, anda boleh berjaya melaksanakan pertanyaan SEPERTI menggunakan pernyataan PDO yang disediakan dalam PHP.
Atas ialah kandungan terperinci Mengapa Penyata Disediakan PDO Gagal Mengembalikan Keputusan dengan Pertanyaan LIKE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!