为了避免SQL注入,我需要使用PDO执行一个“IN”查询,该查询有两次元素列表(数组)。我需要的查询是:
SELECT user_id
FROM user
WHERE google_id IN ('123123123abacaa','123bac21')
OR facebook_id IN ('123123123abacaa','123bac21');
如您所见,元素列表总是相同的。但我不知道如何将数组分配到第二个“IN”语句,PHP会抛出一个“Invalid parameter number”错误。这是我的密码:
$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));
谁能告诉我如何做到这一点?
提前谢谢你
编辑:提供的“可能重复”有点不同,因为我需要在SQL子句中使用数组两次
解决方案:正如@u_mulder所说,通过更改“execute”语句可以轻松解决:
$stmt->execute(array_merge(array_values($ids), array_values($ids)));
在您的情况下,您可以将参数数组与自身合并:
$stmt->execute(array_merge(array_values($ids), array_values($ids)));