Rumah > Soal Jawab > teks badan
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..
P粉2168079242023-10-24 17:57:03
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.
$values = explode(',', $values) ; # 1,4,7 $placeholders = rtrim(str_repeat('?, ', count($values)), ', ') ; $query = "SELECT * FROM table WHERE id IN ($placeholders) AND product=?"; // New! $values[] = $product; $stm = $db->prepare($query); $stm->execute($values);
P粉5010077682023-10-24 09:30:01
Jika $values
ialah tatasusunan, ini sepatutnya berfungsi:
$query = "SELECT * FROM table WHERE id IN ($placeholders) AND product=?"; $stm->execute(array_merge($values, array($product)));
execute()
需要提供一个参数(在本例中是一个数组)。通过添加 array_merge($values, array($product))
,您可以创建一个数组,并在末尾添加 $product
, jadi pertanyaan harus berfungsi dengan baik.
Lihat demo di sini: http://ideone.com/RcClX