Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengikat Nilai LIKE dengan PDO dengan betul dalam Pertanyaan SQL?

Bagaimana untuk Mengikat Nilai LIKE dengan PDO dengan betul dalam Pertanyaan SQL?

Mary-Kate Olsen
Lepaskan: 2024-12-09 08:49:06
asal
776 orang telah melayarinya

How to Correctly Bind LIKE Values with PDO in SQL Queries?

Mengikat Nilai LIKE menggunakan PDO

Dalam pertanyaan SQL, pengendali LIKE digunakan untuk perbandingan padanan corak. Apabila menggunakan sambungan PDO untuk melaksanakan pertanyaan, adalah penting untuk mengikat nilai LIKE dengan betul untuk mengelakkan hasil yang samar-samar.

Satu senario biasa ialah mengikat rentetan separa kepada ungkapan LIKE, seperti:

select wrd from tablename WHERE wrd LIKE '$partial%'
Salin selepas log masuk

Untuk mengikat ini menggunakan PDO, pendekatan yang salah ialah hanya menggantikan $partial% dengan parameter bernama, cth.:

select wrd from tablename WHERE wrd LIKE ':partial%'
Salin selepas log masuk

Ini tidak akan berfungsi kerana PDO tidak akan mentafsir % sebagai aksara kad bebas, yang membawa kepada hasil yang salah. Sebaliknya, terdapat beberapa pilihan untuk mencapai tingkah laku yang diingini:

  • Gunakan pernyataan yang disediakan dengan bindParam():

Ikat parameter dengan versi rentetan separa yang terlepas. Contohnya:

$stmt = $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :partial");
$escapedPartial = $db->quote($partial . '%');
$stmt->bindParam(':partial', $escapedPartial);
Salin selepas log masuk
  • Gunakan CONCAT( untuk membina ungkapan LIKE:

Bina ungkapan LIKE secara dinamik dalam pertanyaan menggunakan CONCAT () fungsi ini membolehkan anda mengelakkan keperluan untuk melarikan diri, kerana aksara kad bebas ditambahkan pada hujung MySQL instance:

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')
Salin selepas log masuk
  • Kendalikan aksara khas menggunakan ESCAPE :

Jika rentetan separa mengandungi aksara khas seperti %, _ atau , anda boleh menggunakan klausa ESCAPE untuk menentukan watak pemegang tempat yang membatalkan makna khas bagi watak tersebut contoh:

$stmt = $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escapedTerm = str_replace(array('+', '%', '_', '\'), array('++', '+%', '+_', '\+'), $term);
$stmt->bindParam(':term', $escapedTerm);
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengikat Nilai LIKE dengan PDO dengan betul dalam Pertanyaan SQL?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan