Mir fallen ein paar Lösungen ein.
Eine Lösung könnte darin bestehen, eine temporäre Tabelle zu erstellen. Führen Sie für jeden Parameter, den Sie in der in-Klausel haben würden, eine Einfügung in die Tabelle durch. Führen Sie dann einen einfachen Join mit Ihrer temporären Tabelle durch.
Eine andere Methode könnte so etwas sein.
$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);
Ich vermute, habe aber keinen Beweis dafür, dass die erste Lösung für größere Listen besser sein könnte und die spätere für kleinere Listen funktionieren würde.
Um @orrd glücklich zu machen, hier eine knappe Version.
$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);