Une façon de le faire sans boucle explicite mais en donnant des marqueurs spécifiques plutôt que des points d'interrogation.
$values_array = array(1, 3, 5, 7, 11);
$sql = "SELECT *
FROM table
WHERE column IN (" . implode(",", array_map(function($in){return ':a'.$in;}, range(1, count($values)))) . ")";
$prep = $db->prepare($sql);
$i = 1;
foreach($values_array as $key=>$value)
{
$prep->bindValue(':a'.$i++, $values_array[$key]);
}
Il utilise plage pour générer un tableau de nombres de 1 au nombre d'éléments dans le tableau, array_map puis changer ces chiffres pour les préfixer avec: et un caractère (dans ce cas seulement). Ceci est dû uniquement à la tentative de débogage de quelque chose qui utilisait des points d'interrogation et échouait. Problème avéré être ailleurs (dû à la boucle à travers le tableau pour lier les valeurs et avoir des problèmes avec bind en utilisant la référence à la variable, qui a été changée dans chaque itération du tableau - atterrissant ayant la même valeur dans chacun des lier les positions), mais pensé que cela pourrait être utile à quelqu'un.
Vraiment, en marquant cela comme une copie d'une question plus récente? – Kickstart
@Kickstart Pourquoi pas - si l'autre question est bonne et fournir des réponses utiles. – Eiko
@Eiko - pourquoi marquer comme doublon plusieurs années après que la même personne a répondu à la copie et a donné essentiellement la même réponse comme un existant ici? – Kickstart