![](/img/trans.png)
[英]PHP foreach outputs everything four times (mysql, sql, database administration)
[英]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 . ': ' . $val. '</p>';
}
}
这将回应:
body
: foo
stamp
:( (timestamp)
...
...
您需要将$posts
更改$posts
多维数组,这可以通过以下方式轻松完成:
...
$posts[] = array('body' => $post->body,
...
那么你的其余代码将按照你的计划运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.