使用PHP在sql查询中传递String数组

时间:2017-05-25 07:33:09

标签: php mysql sql arrays

我有两个表是sql 1)friends_details和2)user_info。 现在使用以下查询使用$number = is coming from app

获取该特定朋友的列表
 $sql = "select friends from user_info WHERE user_number ='$number' ";;
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));

//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
    $emparray[] = $row;
}

现在$emparray在String fromat中有朋友的名字。现在我想将此数组传递给另一个查询,以便我可以找到这些朋友的详细信息。并且找不到办法。我试过这段代码。

$friendsArray2 = "'" .implode("','", $emparray  ) . "'"; 
$query120      = "SELECT * FROM friends_deataisl WHERE name IN  ( $friendsArray2 )";
echo $query120;

并且echo $ query120的结果为SELECT * FROM friends_deatails WHERE name IN ( 'Array','Array' )

所以这意味着值不会出现在查询中。任何帮助,将不胜感激。 我已经检查过$ emparray不是空的它包含的名称意味着第一个查询是正确的,但问题出在第二个查询中。

1 个答案:

答案 0 :(得分:1)

$emparray是一个二维数组,而不是一个字符串数组,因为第一个循环中的$row是一个关联数组。

您需要更改第一个循环:

$emparray[] = $row['friends'];

但您可以将两个查询合并为JOIN

SELECT DISTINCT fd.*
FROM friend_details AS fd
JOIN user_info AS ui ON fd.name = ui.friends
WHERE ui.user_number = '$number'

此外,列名friends让我怀疑这是一个以逗号分隔的名称列表。使用=IN将不起作用 - 它会尝试将整个列表与friend_details.name匹配。最好规范化数据库,以便列中没有列表。如果您无法解决此问题,则需要使用FIND_IN_SET加入表:

SELECT DISTINCT fd.*
FROM friend_details AS fd
JOIN user_info AS ui ON FIND_IN_SET(fd.name, ui.friends)
WHERE ui.user_number = '$number'

在原始代码中,您需要爆炸$row['friends']

$emparray = array_merge($emparray, explode(',', $row['friends']));