いくつかの解決策を考えることができます。
解決策の 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);