Una forma de hacerlo sin un bucle explícito pero dando marcadores específicos en lugar de signos de interrogación.
$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]);
}
Esto utiliza gama para generar una matriz de números de 1 al número de elementos de la matriz, a continuación, array_map para cambiar esos números para anteponer ellos con un: y un carácter (en este caso sólo una).
Solo lo hice debido a intentar depurar algo que usaba signos de interrogación y estaba fallando. El problema resultó estar en otra parte (debido a un bucle en la matriz para enlazar los valores y tener problemas con bind usando la referencia a la variable, que se modificó en cada iteración de la matriz, por lo tanto, aterrizó teniendo el mismo valor en cada uno obligar a posiciones), pero pensé que esto podría ser útil para alguien.
Realmente, ¿marcar esto como un duplicado de una pregunta más nueva? – Kickstart
@Kickstart ¿Por qué no? Si la otra pregunta es buena y brinde respuestas útiles. – Eiko
@Eiko: ¿por qué marcar como duplicado varios años después de que la misma persona respondió el duplicado y dio esencialmente la misma respuesta que una existente aquí? – Kickstart