我有两个表是sql 1)friends_details和2)user_info。
现在使用下面的查询,使用 $number = is come 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 中拥有 friend 的姓名。现在我想将此数组传递到另一个查询中,以便我可以找到这些 friend 的详细信息。并且找不到办法。我已经尝试过这段代码。
$friendsArray2 = "'" .implode("','", $emparray ) . "'";
$query120 = "SELECT * FROM friends_deataisl WHERE name IN ( $friendsArray2 )";
echo $query120;
echo $query120 的结果是SELECT * FROMfriends_deatails WHERE name IN ('Array','Array')
所以这意味着值不会出现在查询中。任何帮助,将不胜感激。 我已经检查过 $emparray 不为空,它包含的名称意味着第一个查询是正确的,但问题出在第二个查询中。
最佳答案
$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']));
关于php - 使用 PHP 在 sql 查询中传递字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44174857/