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