Rumah  >  Soal Jawab  >  teks badan

PDO IN() pernyataan tatasusunan DAN pemegang tempat

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粉832490510P粉832490510383 hari yang lalu623

membalas semua(2)saya akan balas

  • P粉216807924

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

    balas
    0
  • P粉501007768

    P粉5010077682023-10-24 09:30:01

    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

    balas
    0
  • Batalbalas