为了避免SQL注入,我需要使用PDO执行两次具有元素列表(数组)的"IN"查询。我需要的查询是:
SELECT user_id
FROM user
WHERE google_id IN ('123123123abacaa','123bac21')
OR facebook_id IN ('123123123abacaa','123bac21');
正如您所看到的,元素列表总是相同的。但我不知道如何将我的数组配置为第二个"IN"语句,PHP会给我一个"无效参数号"错误。这是我的代码:
$list = implode(',', array_fill(0, count($ids), '?'));
$sql = "SELECT user_id
FROM user
WHERE google_id IN (".$list.")
OR facebook_id IN (".$list.");";
$stmt = $db->prepare($sql);
$stmt->execute(array_values($ids));
有人能告诉我如何做到这一点吗?
提前感谢
EDIT:与提供的"可能重复"有点不同,因为我需要在SQL子句中使用两次数组
解决方案:正如@u_mulder所说,通过更改的"execute"语句可以轻松解决
$stmt->execute(array_merge(array_values($ids), array_values($ids)));
在您的情况下,您可以将params的数组与自身合并:
$stmt->execute(array_merge(array_values($ids), array_values($ids)));