Rumah >pangkalan data >tutorial mysql >Mengapakah PDO Mengembalikan Hanya Satu Baris Apabila Mengikat Parameter ke Klausa WHERE IN?

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

DDD
DDDasal
2024-11-25 09:19:11809semak imbas

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();

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!

Kenyataan:
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