你这样做是不可能的。对于要传递的每个参数,都必须有一个单独的占位符,其他一切都会违背参数的目的(即将代码与数据分离)。
$ids = array(2, 4, 6, 8);
// prepare a string that contains ":id_0,..,:id_n" and include it in the SQL
$plist = ':id_'.implode(',:id_', array_keys($ids));
$sql = "SELECT * FROM someTable WHERE someId IN ($plist)";
// prepare & execute the actual statement
$parms = array_combine(explode(",", $plist), $ids);
$stmt = $PDO->prepare($sql);
$rows = $stmt->execute($parms);
如果允许您在绑定期间将一个值数组传递给单个参数,那么您实际上可以修改SQL语句。这将是SQL注入的一个漏洞——毕竟,没有什么能保证所有数组值都是无辜的整数。