Soalan:
Apabila cuba mengikat parameter pada klausa WHERE IN menggunakan PDO, kiraan yang terhasil sentiasa satu, tidak seperti apabila memasukkan nilai secara manual tanpa parametrisasi. Apakah punca percanggahan ini?
Kod:
$myArray = implode($myArray, ','); $sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)'); $sth->bindParam(':ids', $myArray); $sth->execute(); $result = $sth->fetch(); echo $sth->rowCount();
Jawapan:
Malangnya, Objek Data PHP (PDO) tidak menyokong parameter mengikat untuk klausa IN secara langsung. Tatasusunan $myArray dianggap sebagai rentetan tunggal, serupa dengan SQL ini:
SELECT foo FROM bar WHERE ids IN ('1,2,3')
Walaupun terdapat berbilang nilai dipisahkan koma, pangkalan data mentafsirkannya sebagai satu nilai rentetan.
Untuk mencapai tingkah laku yang diingini, klausa IN mesti dimasukkan secara manual ke dalam pertanyaan sebagai berikut:
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
Malangnya, tiada mekanisme alternatif untuk mengikat parameter dalam klausa IN PDO pada masa ini.
Atas ialah kandungan terperinci Mengapakah PDO Mengembalikan Hanya Satu Baris Apabila Mengikat Parameter ke Klausa WHERE IN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!