在PHP MySQL WHERE子句中使用数组

时间:2013-05-29 22:45:11

标签: php mysql

您好我正在创建一个带有查询的用户ID数组。使用另一个查询,我想从给定的表中进行选择,其中user_id是从我的第一个查询创建的数组中的一个。如何在WHERE子句中使用数组?

仅供参考:$ row_interest是数组

我的代码:

//Grabs the user id's of the users that have the queried interest
$interest_search_query= "SELECT DISTINCT user_id FROM interests WHERE interest LIKE   
'%".$search_term."%'";
$interest_search_result= mysqli_query($connect, $interest_search_query);
$row_interest= mysqli_fetch_array($interest_search_result);

//Grabs the user information with each user id
$search_query= "SELECT DISTINCT user_id, fname, lname, profile_pic, school FROM users   
WHERE user_id IN $row_interest";

我试过" WHERE user_id IN $ row_interest",但它似乎没有用。我能做错什么?

感谢。

4 个答案:

答案 0 :(得分:3)

$search_query= "SELECT DISTINCT user_id, fname, lname, profile_pic, school FROM users   
WHERE user_id IN (".implode(',',$row_interest).")";

答案 1 :(得分:2)

您实际上可以合并两个查询。

SELECT distinct user_id, fname, lname, profile_pic, school
FROM users
WHERE user_id in 
    (SELECT distinct user_id from interests
    where interest like %{search_term}%)

答案 2 :(得分:1)

您可以在PHP中为您的SQL构建一个IN()子句,但由于该集合来自另一个查询,您可以使用JOIN来执行此操作。

编辑: 没有你的数据,我无法测试这个,但是连接会像

$search_query= "SELECT DISTINCT u.user_id, u.fname, u.lname, u.profile_pic, u.school 
FROM user u
INNER JOIN interests i ON u.user_id = i.user_id
WHERE i.interest like '%".$search_term."%'";

答案 3 :(得分:0)

听起来你可以使用连接,但$row_interest是一个数组,它在查询中被插值为"Array"。看起来你想先构建整个数组

$rows = array();
while ($row = mysqli_fetch_array($interest_search_result)) {
    $rows[] = $row['user_id'];
}

然后你可以创建你需要的“IN”子句。

"WHERE user ID IN (" . implode(",", $rows) . ")"

您的代码很容易被注入。您应该使用预准备语句正确地参数化查询。正如我所理解的那样,使用mysqli中的可变数量的参数更难以做到这一点,但需要记住这一点。