我使用mysqli_fetch_assoc()以降序获取数组,并以不同的方式获取。如何纠正它?

时间:2019-05-05 09:29:38

标签: php mysqli-fetch-array

我使用mysqli_fetch_assoc函数以降序获取行,但是当我回显表“ posts”的关联数组时(posts table中只有三行-post 1,post 2,post 3)

它以这种方式打印:({I have added a screenshot of this output

帖子3(修改/删除)

帖子3(编辑/删除)
第2条(编辑/删除)

帖子3(编辑/删除)
第2个帖子(编辑/删除)
发布1(修改/删除)

我希望它以这种方式打印:

帖子3(编辑/删除)
第2个帖子(编辑/删除)
发布1(修改/删除)

这是我的代码:

    <?php
    $db = mysqli_connect("localhost", "root", "", "myblog");
    $sql = "SELECT * FROM posts ORDER BY id DESC";
    $res = mysqli_query($db, $sql) or die(mysqli_error($db));
    $count = mysqli_num_rows($res);
    $posts = "";

    if ($count > 0) {
      while ($row = mysqli_fetch_assoc($res)) {
        $id = $row['id'];
        $title = $row['title'];
        $content = $row['content'];
        $date = $row['date'];


        $admin = "
               <div>
               <a href='del_post.php?pid=$id'>DELETE </a>
               <a href='edit_post.php?pid=$id'>EDIT</a>
               </div>
               ";
        $posts .= "<div><h4>$title</h4><h3>$date</h3><p>$content</p>$admin</div>";

        echo $posts;
      }
    } else {
      echo "there is nothing to show";
    }

    ?>

谢谢。

2 个答案:

答案 0 :(得分:0)

我认为问题出在这一行,

while ($row = mysqli_fetch_assoc($res)

相反,需要将$ res更改为$ count。

答案 1 :(得分:0)

要以Dharman的评论为基础-每次循环时,您都将一些数据连接到$posts变量,然后进行打印,但是您绝不会将$posts重置为空字符串。

一些示例代码:

$rows = [ 'a', 'b', 'c' ];
$posts = '';

foreach ($rows as $row) {
  $posts .= $row;
  echo $posts;
}

在此循环中,第一次打印a,第二次打印ab,第三次打印abc

有(至少)两种方法可以解决此问题,您可以在$posts循环的开始处清除while

while ($row = mysqli_fetch_assoc($res)) {
  $posts = '';

或者您可以将$posts的打印移至while循环完成之后:

  $posts .= "<div><h4>$title</h4><h3>$date</h3><p>$content</p>$admin</div>";
}
echo $posts;

第三个选择是根本不使用$posts变量:

echo "<div><h4>$title</h4><h3>$date</h3><p>$content</p>$admin</div>";