所以我有一个查询来获取数据库中的所有帖子。说我发帖子,它不会显示,直到我发布另一篇文章。所以基本上有一个延迟,直到你发布另一篇文章。这是我能解释的最好的。这是我的查询
SELECT * FROM comments WHERE comment_post_id = :id
然后我创建一个数组
//Get post comments
$cmt = $con->prepare("SELECT * FROM comments WHERE comment_post_id = :id");
$cmt->bindValue(':id', $id, PDO::PARAM_INT);
$cmt->execute();
$cmtc = $cmt->fetch(PDO::FETCH_ASSOC);
$comments = array();
while($row = $cmt->fetch(PDO::FETCH_ASSOC)){
$comments[] = array(
'comment_user' => $row['comment_user'],
'comment_ip' => $row['comment_ip'],
'comment_date' => $row['comment_date'],
'comment_content' => $row['comment_content'],
'comment_post_id' => $row['comment_post_id']
);
}
最后显示它
<?php foreach($comments as $comment){?>
<h1 class="message"><?php echo $comment['comment_content']?></h1>
<?php } ?>
我没有收到任何错误,但是当我在命令行中运行查询时,我得到一个结果。但是当我访问该页面时,我看不到任何结果。
这是结构
+-----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| comment_user | varchar(255) | YES | | NULL | |
| comment_ip | varchar(255) | YES | | NULL | |
| comment_date | varchar(255) | YES | | NULL | |
| comment_content | varchar(85) | YES | | NULL | |
| comment_post_id | varchar(255) | YES | | NULL | |
+-----------------+------------------+------+-----+---------+----------------+
答案 0 :(得分:3)
第一次调用fetch会在获取行后自动将结果集的内部指针递增1:
$cmtc = $cmt->fetch(PDO::FETCH_ASSOC);
上面返回第0行并将指针移动到第一行。所以,当你进入你的while循环时,指针最多只有一个,并且没有找到任何东西:
while($row = $cmt->fetch(PDO::FETCH_ASSOC)){
答案 1 :(得分:1)
原因是该行:
$cmtc = $cmt->fetch(PDO::FETCH_ASSOC);
你应该简单地删除它。
否则您获取第一条记录并且不将其分配给$comments
变量,然后在循环中尝试从2到n获取记录
答案 2 :(得分:1)
要获取查询的所有结果,请尝试以下操作:
$cmt = $con->prepare("SELECT * FROM comments WHERE id = :id");
$cmt->bindValue(':id', 1);
$cmt->execute();
$comments = $cmt->fetchAll(PDO::FETCH_ASSOC);
PS。您的架构使用id作为主键,但您的查询使用comment_post_id。