在PHP Fat Free Framework上是否可以为IN条件清理数组?

问题描述 投票:0回答:1

例如,如果要清理字符串,请使用以下代码

$db->exec("SELECT * FROM users WHERE email = :email", [':email' => '[email protected]']);

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

$db->exec("SELECT * FROM users WHERE email IN :emails", [':emails' => ['[email protected]', '[email protected]']]);

什么是正确的方法?谢谢您的时间

php fat-free-framework
1个回答
0
投票

不幸的是,这并不容易,因为PDO class本身并未提供任何机制。

这里是操作方法:

$emails = ['[email protected]', '[email protected]'];

$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);

UPDATE:

实际上,我没有看到george007's answer,它比我的简洁得多。我不知道框架会自动更正任何0索引的参数数组(PDO要求索引从1开始)。

所以这是您可以获得的最简洁的内容:

$emails = ['[email protected]', '[email protected]'];

$sql = 'SELECT * FROM users WHERE email IN (?' . str_repeat(',?', count($emails)-1) . ')';

$db->exec($sql, $emails);
© www.soinside.com 2019 - 2024. All rights reserved.