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

标签 php mysql sql arrays

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

相关文章:

php - 使用 gmail api 发送电子邮件时等号丢失

mysql - 将 Yii2 中的变量插入数据库

mysql - SQL触发器更新同一个表

php - 复选框、表单提交以及如何在循环中正确使用 array_fill?

来自命令行的 sqlplus 语句

mysql - 也请求具有相同单元格的行数

php - 用户注册 php

php - 您可以在架构中指定 Composer 的特定版本吗?

php - 由于 OpenSSL 错误,无法完成 Paypal 即时付款通知

mysql - 如何使用通配符和空格从多个 MySQL 列中进行选择?