php和mysql foreach只显示第一条记录四次

标签 php mysql loops foreach while-loop

我构建了一个函数来从数据库中获取记录,并尝试使用 foreach 循环打印结果。

这是我的功能:

function get_posts($connection) {

    $posts = array();
    $sql = "SELECT * FROM posts ORDER BY stamp DESC";
    $result = mysqli_query($connection, $sql);

    while ($post = mysqli_fetch_object($result)) {
        $posts = array('body'        => $post->body,
                       'stamp'      => $post->stamp,
                       'post_id'    => $post->id,
                       'user_id'    => $post->user_id);

    }
        return $posts;
}

现在我尝试使用以下代码显示结果:

  $posts = get_posts($connection);
  foreach ($posts as $key => $value) {
    echo $posts['body'] . "<hr>";
  }

当使用这段代码时,它只返回数据库中的第一条记录 4 次。我已经使用 var_dump 来确保它确实是一个数组,而且它确实是一个数组。我一定是错误地使用了 foreach 循环。

PS:可以将 mysqli_fetch_object 转换为 mysqli_fetch_assoc 吗?我认为使用它可能更容易,但我不知道如何在函数内使用它。任何代码位都值得赞赏。

谢谢!

最佳答案

您应该新元素放入数组的新索引中,如下所示:

while ($post = mysqli_fetch_object($result)) {
    $posts[] = array('body'        => $post->body,
                   'stamp'      => $post->stamp,
                   'post_id'    => $post->id,
                   'user_id'    => $post->user_id);

}

请注意,在此之前您应该将 $post 初始化为数组,例如:

$posts = array();

然后您可以通过以下方式检索信息:

foreach($posts as $postInfo) {
    foreach($postInfo as $key => $val) {
        echo '<p>' .$key . ':&nbsp;' . $val. '</p>';
   }
}

这将回显:

正文:foo
时间戳:(时间戳)
...
...

关于php和mysql foreach只显示第一条记录四次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20545758/

相关文章:

php - mysql 索引到日期时间类型的列

mysql - 创建外键的步骤错误,在 FK 表中返回零行

loops - Go 中的无限 'for' 循环

Bash 脚本循环只运行一次

r - 根据 R 中另一列的值使用二进制变量填充新列

php - CodeIgniter:如何将 $this->db->insert_id() 值传递给 Controller 以便插入到另一个表中?

php - CakePHP:在以逗号分隔的内爆函数中转义单引号

php - Laravel 生产问题 - 使用 Laravel 4.1.x 更新 Composer

javascript - 如何将字符串传递给 onclick 消息?

mysql - 此任务的有效查询是什么