SQL の in で プレイスホルダー を使う方法. php以外にも応用できるかも
<?php
if (PHP_SAPI !== 'cli') throw new Exception(PHP_SAPI . ' is not supported SAPI.');
$pdo = new PDO('sqlite:test.db');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
/** setup **/
$pdo->beginTransaction();
// delete data every time to restart from clean environment.
$pdo->prepare("DROP TABLE IF EXISTS test")->execute();
$pdo->prepare("
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT
)")->execute();
// insert arbittary data
foreach(range('a','z') as $ch)
$pdo->prepare("INSERT INTO test (name) values (?)")
->execute(array('name_'.$ch));
$pdo->commit();
/** main issue **/
$ids = [4,3,20,13];
$sql0 =<<<EOS
SELECT *
FROM test
WHERE id IN (%s)
EOS;
// fill placeholder '?'s
$stms = $pdo->prepare(sprintf($sql0, join(',', array_fill(0,count($ids),'?'))));
$stms->execute($ids);
var_dump($stms->fetchAll());