SQL の IN 句を DBI のプリペアードステートメントで使う場合
my $dbh = DBI->connect(...); my @users = ('yamada', 'sato', 'suzuki', 'takahashi'); my @values = map {'?'} @users; my $place_holders = join ', ', @values; my $sql = sprintf('SELECT id, timestamp FROM sample WHERE users IN (%s);', $place_holders); # say $sql # SELECT id, timestamp FROM sample WHERE users IN (?, ?, ?, ?); my $sth = $dbh->prepare($sql); eval { $sth->execute(@users); }; if ($@) { $dbh->rollback; warn $dbh->errstr; } else { $dbh->commit; }