Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengikat Nilai LIKE dengan PDO dengan betul dalam Pertanyaan SQL?
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!