2017-05-25 113 views
0

我有两个表是sql 1)friends_details和2)user_info。 现在使用下面的查询正在逐渐使用$number = is coming from app传递字符串数组在sql查询使用PHP

$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具有的字符串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

因为mysqli_fetch_assoc回报阵列,你必须像'$ emparray [] = $ row ['friends'];''一样填写'emparray'。 – maximkou

回答

1

$emparray是一个2维数组,而不是一个字符串数组,因为第一个循环中的$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'])); 
+0

感谢Barmar的工作。 –