有没有一种方法可以针对 PHP Fat Free Framework 上的 IN 条件清理数组?

Is there a way of sanitize an array for an IN condition on PHP Fat Free Framework?

例如,如果我想清理一个字符串,我使用下面的代码

$db->exec("SELECT * FROM users WHERE email = :email", [':email' => 'john.smith@gmail.com']);

但是如果我想使用 IN 条件,则以下代码不起作用

$db->exec("SELECT * FROM users WHERE email IN :emails", [':emails' => ['john.smith@gmail.com', 'juan.perez@gmail.com']]);

执行此操作的正确方法是什么? 感谢您的宝贵时间

不幸的是,没有简单的方法来做到这一点,因为 PDO class 本身没有为此提供任何机制。

操作方法如下:

$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's answer,比我的简洁多了。我不知道框架会自动更正任何索引为 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);