Ich habe diesen Code auf SO gefunden, der sich hervorragend für die gemeinsame Verwendung von PDO- und IN()-Anweisungen eignet.
$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) ;
Aber wie mische ich andere Dinge in die Abfrage ein, damit sie so aussieht:
$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
Ich dachte, das würde funktionieren, aber ich bekomme:
Warnung: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Ungültige Anzahl von Argumenten: Die Anzahl der Bindevariablen stimmt nicht mit der Anzahl der Tags in Zeile 3 ($stm-Zeile) überein
Irgendeine Idee, wie es wie erwartet funktioniert?
Updateexecute to array, funktioniert immer noch nicht..
这里的问题是
execute
需要一个单个数组。您不能传递多个数组,更糟糕的是,您不能嵌套数组。我们已经有了一个完美的
$values
数组,所以让我们在创建占位符字符串之后重用它。解决方案
如果
$values
是一个数组,这应该可以工作:说明
execute()
需要提供一个参数(在本例中是一个数组)。通过添加array_merge($values, array($product))
,您可以创建一个数组,并在末尾添加$product
,因此查询应该可以正常工作。在此处查看演示:http://ideone.com/RcClX