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
Lepaskan: 2024-11-01 12:50:29
asal
581 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk
  • 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>
Salin selepas log masuk
  • 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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan