php和mysql foreach只显示第一条记录四次
我构建了一个从数据库中获取记录的函数,并尝试使用foreach循环打印结果 以下是我的功能:php和mysql foreach只显示第一条记录四次,php,mysql,loops,foreach,while-loop,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($resu
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>";
}
$posts=get_posts($connection);
foreach($key=>$value){
echo$posts['body']。“
”;
}
当使用该位代码时,它只从数据库返回第一条记录4次。我使用了var_dump来确保它确实是一个数组,而且它确实是。我一定是在这里错误地使用了foreach循环
PS:mysqli\u fetch\u对象是否可以转换为mysqli\u fetch\u assoc?我认为它可能更容易使用,但我不知道如何在函数中使用它。欢迎使用任何代码位
谢谢大家! 在函数
get_posts
中,覆盖$posts
数组中以前的值。
试试这个:
array_push($posts, array('body' => $post->body,
'stamp' => $post->stamp,
'post_id' => $post->id,
'user_id' => $post->user_id));
您需要将
$posts
更改为多维数组,这样做很容易:
...
$posts[] = array('body' => $post->body,
...
然后剩下的代码将按计划工作。您应该
将新元素放入数组的新索引中,如下所示:
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>';
}
}
foreach($posts as$postInfo){
foreach($postInfo as$key=>$val){
回显“”.$key.:“.$val.”;
}
}
这将反映:
body
:foo
戳
:(时间戳)
...
现在它抛出了以下错误:注意:未定义的索引:第26行的/Applications/MAMP/htdocs/blog/index.php中的body-26行是echo$posts['body'];根据您的评论,您在第11行的/Applications/MAMP/htdocs/blog/includes/functions.php中将帖子拼错为posttsParse error:syntax error,意外的“=>”(T_双箭头)。我必须查看您所有固定的相关代码才能理解问题。这似乎有效。你能解释一下为什么要用两个foreach循环来得到结果吗?首先获取$posts,然后将其设置为$postinfo,然后使用该$postinfo。您不能将$posts用作$key=>$val吗?因为这里的$posts
是一个多维数组,该数组中的每个索引都包含另一个数组,该数组包含一对键和值。根据rasmus lerdorf
的规定,永远不要使用数组推送
函数,因为它存在性能问题,而使用实际的语法将新元素推入数组:$arr[]=“lastOne”
;我明白了,非常感谢你花时间回答。