J'ai trouvé ce code sur SO qui est idéal pour utiliser les instructions PDO et IN() ensemble.
$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) ;
Mais comment mélanger d'autres éléments dans la requête pour qu'elle ressemble à ceci :
$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
Je pensais que cela fonctionnerait, mais j'obtiens :
Avertissement : PDOStatement::execute() [pdostatement.execute] : SQLSTATE[HY093] : Nombre d'arguments invalide : le nombre de variables de liaison ne correspond pas au nombre de balises de la ligne 3 ($stm line)
Une idée pour que cela fonctionne comme prévu ?
Mise à jourexécuter sur le tableau, ne fonctionne toujours pas..
Le problème ici est que
execute
nécessite un seul tableau. Vous ne pouvez pas transmettre plusieurs tableaux et, pire encore, vous ne pouvez pas imbriquer des tableaux.Nous avons déjà un tableau
$values
parfait, alors réutilisons-le après avoir créé la chaîne d'espace réservé.Solution
Si
$values
est un tableau, cela devrait fonctionner :Instructions
execute()
需要提供一个参数(在本例中是一个数组)。通过添加array_merge($values, array($product))
,您可以创建一个数组,并在末尾添加$product
, donc la requête devrait fonctionner correctement.Voir la démo ici : http://ideone.com/RcClX