查询迟到一个帖子

时间:2014-07-16 18:20:03

标签: php mysql sql database

所以我有一个查询来获取数据库中的所有帖子。说我发帖子,它不会显示,直到我发布另一篇文章。所以基本上有一个延迟,直到你发布另一篇文章。这是我能解释的最好的。这是我的查询

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    |                |
+-----------------+------------------+------+-----+---------+----------------+

3 个答案:

答案 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。