Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Penyata Disediakan PDO Gagal Mengembalikan Keputusan dengan Pertanyaan LIKE?

Mengapa Penyata Disediakan PDO Gagal Mengembalikan Keputusan dengan Pertanyaan LIKE?

DDD
DDDasal
2024-11-01 12:50:29546semak imbas

Why Does PDO Prepared Statement Fail to Return Results with LIKE Query?

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>
  • Pendekatan ini ialah tidak betul kerana ia menambah petikan berganda yang tidak perlu.
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));  // Incorrect</code>
  • Menggunakan CONCAT untuk membungkus istilah carian dalam pertanyaan tidak diperlukan untuk parameterisasi.

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!

Kenyataan:
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