我构建了一个函数来从数据库中获取记录,并尝试使用 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 . ': ' . $val. '</p>';
}
}
这将回显:
正文
:foo
时间戳
:(时间戳)
...
...
关于php和mysql foreach只显示第一条记录四次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20545758/