防止数组中的双重条目[重复]

Posted

技术标签:

【中文标题】防止数组中的双重条目[重复]【英文标题】:Prevent double entries in array [duplicate] 【发布时间】:2017-11-30 18:17:58 【问题描述】:

要理解问题,请先看一下这段代码:

$thuser = $_SESSION['username']; //current user
$sql = "SELECT sender FROM dm WHERE receiver = '$thuser'";

if ($result = mysqli_query($link, $sql)) 
    $t = 1;

    while ($partner = $result->fetch_row()) 
        $ptr = 'Partner'.$t;
        $chatpartners[$ptr] = $partner[0];
        $t++;
    ;
 
echo json_encode($chatpartners);

现在,sql 查询将选择多个发件人,例如“John”、“Eric”、“James”、“James”。

我的问题是,如何防止“James”被两次插入到数组中。

数组应该如下所示:

 Partner1: "John", Partner2: "Eric", Partner3: "James" 

不是这样的:

 Partner1: "John", Partner2: "Eric", Partner3: "James", Partner4: "James" 

如何实现?

感谢您的帮助!

【问题讨论】:

您可以在查询中使用distinct(sender),也可以在查询中使用group by sender 你准备好你的数据库被攻击并可能被删除了吗?或许有一天你会猛然惊醒,或许这会让你对sql注入预防方法大开眼界。 @Fred-ii- 我知道我应该使用准备好的语句,这只是为了更容易。 “更容易”是什么意思?对于潜在的黑客/中间人来说,这确实使他们“更容易”破坏您的数据库。始终使用准备好的声明,即使您可能认为可能是受信任的用户。 当然,但您有没有想过未来可能会有人访问这个问题? ;-) 【参考方案1】:

只需在您的 sql 查询中使用 DISTINCT,如下所示:

$sql = "SELECT DISTINCT sender FROM dm WHERE receiver = '$thuser'";

另一种选择是像这样使用array_unique

$chatpartners = ['Partner1' => "John", 'Partner2' => "Eric", 'Partner3' => "James", 'Partner4' => "James"];

$chatpartners = array_unique($chatpartners);

echo json_encode($chatpartners);

输出:

"Partner1":"John","Partner2":"Eric","Partner3":"James"

【讨论】:

好的,现在运行良好。在这里使用 DISTINCT 无疑是最好的选择。谢谢。

以上是关于防止数组中的双重条目[重复]的主要内容,如果未能解决你的问题,请参考以下文章

防止 Firestore 规则中的重复条目不起作用

如何防止 Jquery 可排序连接列表中的重复条目?

防止 SQLAlchemy 中多对多关系中的重复表条目

如果在服务器端生成唯一 ID,应用程序如何防止数据库中的重复条目

刷新时如何防止重复条目?

无法防止双重输入 c# listview