К сожалению, сделать это нелегко, поскольку класс PDO сам по себе не предоставляет никакого механизма для этого.
Вот как это сделать:
$emails = ['john.smith@gmail.com', 'juan.perez@gmail.com'];
$sql = 'SELECT * FROM users WHERE email IN (' .
implode(',', array_fill(0, count($emails), '?')) . ')';
$i = 1;
$args = [];
foreach ($emails as $email)
$args[$i++] = $email;
$db->exec($sql, $args);
ОБНОВЛЕНИЕ:
На самом деле, я не видел ответа george007 , который гораздо более лаконичен, чем мой. Я не знал, что фреймворк автоматически исправляет любой массив с 0 индексированными аргументами (PDO требует, чтобы индекс начинался с 1).
Итак, вот наиболее сжатый вариант, который вы можете получить:
$emails = ['john.smith@gmail.com', 'juan.perez@gmail.com'];
$sql = 'SELECT * FROM users WHERE email IN (?' . str_repeat(',?', count($emails)-1) . ')';
$db->exec($sql, $emails);