我在 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