いくつかの解決策を考えることができます。
1つの解決策は、一時テーブルを作成することです。 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);