提问者:小点点

使用PDO在MySQL“in”查询中多次使用同一数组


为了避免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)));

共1个答案

匿名用户

在您的情况下,您可以将参数数组与自身合并:

$stmt->execute(array_merge(array_values($ids), array_values($ids)));