我构建了一个从数据库中获取记录的函数,我正在尝试使用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 吗?我认为使用它可能更容易,但我不知道如何在函数中使用它。任何代码位都表示赞赏。
谢谢!
答案 0 :(得分:1)
在函数get_posts
中,您覆盖$posts
数组中的先前值。
试试这个:
array_push($posts, array('body' => $post->body,
'stamp' => $post->stamp,
'post_id' => $post->id,
'user_id' => $post->user_id));
答案 1 :(得分:1)
你应该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 . ': ' . $val. '</p>';
}
}
这将回应:
body
:foo
stamp
:(timestamp)
......
...
答案 2 :(得分:0)
您需要将$posts
更改为多维数组,这可以通过以下方式轻松完成:
...
$posts[] = array('body' => $post->body,
...
然后其余的代码将按照您的计划运行。