我有一个foreach循环,应该在表“notification”
中添加一行 $infoquery = "SELECT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";
$identifier = mysqli_query($dbc, $infoquery);
$rows = mysqli_fetch_array($identifier);
foreach(array_unique($rows) as $row){
$core->addNotification($row['user_id'], $link, $description);
}
但它只添加一个值,它应该添加两个通知,一个用于用户1
,另一个用于用户3
答案 0 :(得分:2)
您只获取一行,它应该是这样的:
$infoquery = "SELECT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";
$identifier = mysqli_query($dbc, $infoquery);
while($row = mysqli_fetch_array($identifier)){
$core->addNotification($row['user_id'], $link, $description);
}
答案 1 :(得分:1)
除了tkausl的正确答案之外,您的另一个问题是唯一身份访问者:array_unique
会比较数组中项目的字符串值。
让我们来看看:
var_dump(strval(array("bob")), strval(array("ed")));
哪个输出:
string(5) "Array"
string(5) "Array"
(以及一大堆错误)。
因此,由于它们的字符串表示相同,如果您期望多维数组array(array("user"=>"bob"),array("user"=>"ed"))
,那么您将只保留一个条目。现在,有很多方法可以在PHP中解决这个问题,但是你的数据库更好,使用:
SELECT DISTINCT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";
(但是请查看准备好的语句,而不是添加原始参数/查询构建)。
答案 2 :(得分:0)
或者,如果您的结果集很小,您可以使用该结果一次获取所有数据,并避免使用迭代来根据手册使用$ result-> fetch_all来获取数据(请参阅{{3} }),如下:
<?php
$query = "SELECT `user_id` FROM reply WHERE `post_id` = '" .$replyid. "'";
$identifier = mysqli_query( $dbc, $query );
$result = $mysqli->query( $query );
$rows = $result->fetch_all( MYSQLI_ASSOC );
foreach ( $rows as $row ) {
$core->addNotification( $row['user_id'], $link, $description );
}