MYSQL和PHP-即使变量不是唯一的,每个IN变量也返回1个结果

时间:2018-08-29 21:27:24

标签: php mysql sql prepared-statement

我正在查询数据库以通过user_name返回user_id行,并在PHP中使用以下准备好的语句:

$stmt = $conn->prepare("SELECT user_name FROM users WHERE user_id IN (?,?,?,?,?,?,?,?,?,?)");

如果IN语句中的每个变量都是唯一的,并且在数据库中,则每个变量都会收到1个user_name结果。 但是,如果我的IN语句中的变量不是唯一的(其中user_id中的2个是foo),则我目前没有得到每个变量的user_name结果IN变量。

如何修改准备好的语句,以使即使我的IN语句中的所有变量都相同,我仍然会收到每个变量1行,如果返回null,找不到变量。

1 个答案:

答案 0 :(得分:3)

改为使用left join

SELECT u.user_name
FROM (SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id UNION ALL
      SELECT ? as user_id
     ) uu LEFT JOIN
     users u
     USING (user_id);

WHERE子句仅过滤出行。它不会将它们相乘。但是联接确实可以满足您的要求。