Dalam pertanyaan SQL dipacu PDO, adalah perkara biasa untuk menghadapi keperluan untuk mengikat nilai LIKE yang merangkumi % aksara kad bebas. Mengikat nilai sedemikian memastikan pencegahan suntikan SQL. Walau bagaimanapun, sintaks untuk berbuat demikian boleh mengelirukan.
Pertimbangkan pertanyaan:
select wrd from tablename WHERE wrd LIKE '$partial%'
Di sini, anda mahu ikat pembolehubah $partial menggunakan PDO. Dilema timbul apabila memutuskan cara untuk mengikat % aksara.
Pilihan 1:
select wrd from tablename WHERE wrd LIKE ':partial%'
Ikat :separa kepada $ partial="somet".
Pilihan 2:
select wrd from tablename WHERE wrd LIKE ':partial'
Ikat :separa kepada $partial="somet%".
Pilihan 3 (Alternatif):
SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')
Lakukan penggabungan rentetan menggunakan fungsi MySQL CONCAT.
Jika perkataan separa yang dicari mengandungi aksara % atau garis bawah, pengendalian khas diperlukan. Penyelesaiannya melibatkan penggunaan klausa ESCAPE dalam pernyataan PDO:
$stmt = $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'"); $escaped = str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var); $stmt->bindParam(':term', $escaped);
Teknik ini memastikan bahawa aksara khas ditafsirkan dengan betul dalam ungkapan LIKE.
Atas ialah kandungan terperinci Bagaimana untuk Mengikat Nilai SUKA dengan % Aksara dalam PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!