我正在从头开始创建自己的博客,其主页按发布时间顺序加载最新帖子。我使用前端 Controller 调用帖子并将数据存储在 MySQL 数据库中。该网站本身很棒,所有帖子都可以完美加载,没有任何问题。问题是让主页正常工作。
我为主页创建了一些 PHP 函数。他们通常按 ID 按降序对帖子(数据库行)进行排序,因为它是自动增量字段,并调用他们的数据。然后通过从数据库的最顶行(即最新帖子)获取数据,将最新帖子显示为顶部的“精选帖子”。
效果很好 - 当我回显结果时,它会按照我想要的方式显示最新的帖子。
在下面,我想要两个并排的框,用于第一个帖子之前的两个帖子。所以我做了这个函数来调用它们:
function fetch_rest_posts_1($conn) {
$stuff = $conn->query("SELECT * FROM table WHERE is_post = 1 ORDER BY id DESC LIMIT 1,2");
while ($row = $stuff->fetch_array()) {
$i=1;
return '<div id="post_'.$i.'" style="width:308px;height:215px;padding:5px">
<h2>'.$row['title'].'</h2>
<p>'.date('d/m/Y',strtotime($row['published_date'])).' by '.$row['author'].' | <a href="http://www.domainname.com/'.$row['uri'].'#disqus_thread"></a></p>
<p>'.$row['meta_description'].'</p>
</div>';
$i++;
} // style="white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis"
}
当我回显结果时,它确实工作得很好,显示了我想要的一切,但它只显示了一个 div,而不是两个。当我获取 SQL 查询并将其直接输入 phpMyAdmin 时,它给了我两行。我是不是做错了什么?
(我将自动增加的 $i 放在那里,以便我可以隔离每个框并稍后更改样式。)
最佳答案
您的问题是由循环中的 return 语句引起的。您应该在函数顶部添加 $return = ''
,将 return
替换为 $result .=
,然后 return $结果
位于函数末尾。
此外,循环计数器 $i
在每次迭代中都会重置。将初始分配移出循环。
编辑: .=
有意附加到 $result
,而不是用从下一个数据集构造的另一个值替换它。
关于PHP while循环从数据库获取发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920227/