我在 SO 上找到了這段程式碼,它非常適合一起使用 PDO 和 IN() 語句。
$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) ;
但是,如何在查詢中混合其他內容,讓查詢看起來像這樣:
$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
我認為這會起作用,但我得到:
警告: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 無效參數數量:綁定變數數量與第3 行中的標記數量不符($stm線)
知道如何讓它如預期運作嗎?
更新執行到數組,仍然不起作用..
P粉2168079242023-10-24 17:57:03
這裡的問題是 execute
需要一個單一陣列。您不能傳遞多個數組,更糟的是,您不能嵌套數組。
我們已經有了一個完美的 $values
數組,所以讓我們在創建佔位符字串之後重用它。
$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
如果 $values
是一個數組,這應該可以工作:
$query = "SELECT * FROM table WHERE id IN ($placeholders) AND product=?"; $stm->execute(array_merge($values, array($product)));
execute()
需要提供一個參數(在本例中是一個陣列)。透過新增 array_merge($values, array($product))
,您可以建立一個數組,並在末尾新增 $product
,因此查詢應該可以正常運作。
在此處查看示範:http://ideone.com/RcClX