Saya menjumpai kod ini pada SO yang bagus untuk menggunakan pernyataan PDO dan IN() bersama-sama.
$values = explode(',', $values) ; # 1,4,7 $placeholders = rtrim(str_repeat('?, ', count($values)), ', ') ; $query = "SELECT * FROM table WHERE id IN ($placeholders)"; $stm = $db->prepare($query) ; $stm->execute($values) ;
Tetapi bagaimana saya mencampurkan perkara lain dalam pertanyaan supaya ia kelihatan seperti ini:
$query = "SELECT * FROM table WHERE id IN ($placeholders) AND product=?"; $stm = $db->prepare($query) ; $stm->execute(array($values,$product)) ; //error happens when adding product placeholder
Saya fikir ini akan berjaya, tetapi saya mendapat:
Amaran: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Bilangan argumen tidak sah: Bilangan pembolehubah ikatan tidak sepadan dengan bilangan tag dalam baris 3 ($stm line)
Ada idea bagaimana untuk menjadikannya berfungsi seperti yang diharapkan?
Kemas kinilaksanakan kepada tatasusunan, masih tidak berfungsi..
Masalahnya di sini ialah
execute
memerlukan single array. Anda tidak boleh melepasi berbilang tatasusunan, dan lebih teruk lagi, anda tidak boleh menyusun tatasusunan.Kami sudah mempunyai tatasusunan
$values
yang sempurna, jadi mari kita gunakan semula selepas mencipta rentetan ruang letak.Penyelesaian
Jika
$values
ialah tatasusunan, ini sepatutnya berfungsi:Arahan
execute()
需要提供一个参数(在本例中是一个数组)。通过添加array_merge($values, array($product))
,您可以创建一个数组,并在末尾添加$product
, jadi pertanyaan harus berfungsi dengan baik.Lihat demo di sini: http://ideone.com/RcClX