有没有一种方法可以针对 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);
例如,如果我想清理一个字符串,我使用下面的代码
$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);