gpt4 book ai didi

php - 使用 PHP 在 sql 查询中传递字符串数组

转载 作者:行者123 更新时间:2023-11-29 10:48:21 24 4
gpt4 key购买 nike

我有两个表是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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com