Mengapakah PDO Mengembalikan Hanya Satu Baris Apabila Mengikat Parameter ke Klausa WHERE IN?

DDD
Lepaskan: 2024-11-25 09:19:11
asal
780 orang telah melayarinya

Why Does PDO Return Only One Row When Binding Parameters to a WHERE IN Clause?

Mengikat Parameter Klausa WHERE IN dengan PDO

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();
Salin selepas log masuk

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')
Salin selepas log masuk

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 .')'
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan