例如,如果要清理字符串,请使用以下代码
$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]']]);
什么是正确的方法?谢谢您的时间
不幸的是,这并不容易,因为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);