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
Mary-Kate Olsenasal
2024-12-09 08:49:06745semak imbas

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%'

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

select wrd from tablename WHERE wrd LIKE ':partial%'

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);
  • 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, '%')
  • 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);

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!

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