我可以想到几个解决方案。
一种解决方案可能是创建一个临时表。为 in 子句中的每个参数执行插入到表中。然后对临时表执行简单的联接。
另一种方法可能是做这样的事情。
$dbh=new PDO($dbConnect, $dbUser, $dbPass);
$parms=array(12, 45, 65, 33);
$parmcount=count($parms); // = 4
$inclause=implode(',',array_fill(0,$parmcount,'?')); // = ?,?,?,?
$sql='SELECT age, name FROM people WHERE id IN (%s)';
$preparesql=sprintf($sql,$inclause); // = example statement used in the question
$st=$dbh->prepare($preparesql);
$st->execute($parms);
我怀疑,但没有证据,第一种解决方案可能更适合较大的列表,而后者适用于较小的列表。
为了让@orrd在这里感到高兴的是一个简洁的版本。
$dbh=new PDO($dbConnect, $dbUser, $dbPass);
$parms=array(12, 45, 65, 33);
$st=$dbh->prepare(sprintf('SELECT age, name FROM people WHERE id IN (%s)',
implode(',',array_fill(0,count($parms),'?'))));
$st->execute($parms);