【发布时间】: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- 我知道我应该使用准备好的语句,这只是为了更容易。
-
“更容易”是什么意思?对于潜在的黑客/中间人来说,这确实使他们“更容易”破坏您的数据库。始终使用准备好的声明,即使您可能认为可能是受信任的用户。
-
当然,但您有没有想过未来可能会有人访问这个问题? ;-)