PDO IN() pernyataan tatasusunan DAN pemegang tempat
P粉832490510
P粉832490510 2023-10-23 21:43:13
0
2
634

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粉832490510
P粉832490510

membalas semua(2)
P粉216807924

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粉501007768

Penyelesaian

Jika $values ialah tatasusunan, ini sepatutnya berfungsi:

$query = "SELECT * FROM table WHERE id IN ($placeholders) AND product=?";
$stm->execute(array_merge($values, array($product)));

Arahan

execute() 需要提供一个参数(在本例中是一个数组)。通过添加 array_merge($values, array($product)),您可以创建一个数组,并在末尾添加 $product, jadi pertanyaan harus berfungsi dengan baik.

Lihat demo di sini: http://ideone.com/RcClX

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan