Rumah >pangkalan data >tutorial mysql >Mengapa Pernyataan Disediakan PHP PDO Saya Tidak Berfungsi dengan MySQL LIKE Queries?

Mengapa Pernyataan Disediakan PHP PDO Saya Tidak Berfungsi dengan MySQL LIKE Queries?

Patricia Arquette
Patricia Arquetteasal
2024-11-30 10:41:13454semak imbas

Why Doesn't My PHP PDO Prepared Statement Work with MySQL LIKE Queries?

Penyata PHP PDO Disediakan - Pertanyaan MySQL LIKE: A Conundrum

Apabila bekerja dengan kelas PDO PHP (pemacu MySQL), melaksanakan pertanyaan MySQL LIKE menggunakan pernyataan yang disediakan boleh menjadi tugas yang membingungkan. Sintaks yang kelihatan mudah selalunya gagal untuk menghasilkan hasil yang diingini.

Pertimbangkan pertanyaan berikut yang lancar mendapatkan data menggunakan klien MySQL:

SELECT   ...
FROM      hs
...
WHERE     hs.hs_text LIKE "%searchTerm%"
LIMIT 25;

The Conundrum

Walau bagaimanapun, apabila mengalihkan pertanyaan ini ke PHP, anda mungkin menghadapi kekecewaan kerana tidak dapat mengembalikan sebarang hasil, tanpa mengira sintaks yang anda cuba. Kod di bawah menunjukkan isu ini:

$sql = 
    'SELECT   ...
    FROM      hs
    ...
    WHERE     hs.hs_text LIKE :searchTerm
    LIMIT 25';

$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));

Percubaan untuk menyediakan istilah carian sebagai CONCAT('%', ?, '%'), "%:searchTerm%", atau ":searchTerm", manakala mengubah suai baris pelaksanaan dengan sewajarnya, terbukti sia-sia.

Penyelesaian

Kunci kepada menyelesaikan teka-teki ini terletak pada pemahaman bagaimana pernyataan yang disediakan mengendalikan data. Mereka menyampaikan data secara berasingan daripada pertanyaan, menghapuskan keperluan untuk petikan apabila membenamkan nilai.

Oleh itu, penyelesaian yang betul ialah:

$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));

Dengan mengalih keluar tanda petikan berganda yang disertakan daripada parameter istilah carian , anda kini menggunakan kuasa pernyataan yang disediakan, membolehkan anda melaksanakan pertanyaan LIKE anda dengan jayanya.

Atas ialah kandungan terperinci Mengapa Pernyataan Disediakan PHP PDO Saya Tidak Berfungsi dengan MySQL LIKE Queries?. 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