繁体   English   中英

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

[英]php and mysql foreach only displays the first record four times

我构建了一个函数来从数据库中获取记录,我正在尝试使用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吗? 我认为使用它可能更容易,但我不知道如何在函数中使用它。 任何代码位都表示赞赏。

谢谢!

在函数get_posts您覆盖$posts数组中的先前值。 尝试这个:

array_push($posts, array('body' => $post->body,
                   'stamp'   => $post->stamp,
                   'post_id' => $post->id,
                   'user_id' => $post->user_id));

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

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>';
   }
}

这将回应:

bodyfoo
stamp :( (timestamp)
...
...

您需要将$posts更改$posts多维数组,这可以通过以下方式轻松完成:

...
$posts[] = array('body'        => $post->body,
...

那么你的其余代码将按照你的计划运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM