【问题标题】:Query returns one post late查询延迟返回一篇文章
【发布时间】:2014-07-16 18:20:02
【问题描述】:

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

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

【问题讨论】:

  • print_r($comments) 的输出是什么?是否显示内容?
  • 不返回任何内容@dognose
  • 但是当我发表另一条评论并做print_r 我得到一个数组@dognose
  • 你确定吗?也许您正在打开一个阻止提交的事务。您可能想查看您的数据库并确保正确提交了 cmets。
  • 例如,当我执行SELECT * FROM comments WHERE comment_post_id = 75 时,查询工作正常。我会收到一条评论,然后当我查看该页面时它不存在。 @tadman

标签: php mysql sql database


【解决方案1】:

您第一次调用 fetch 在获取行后会自动将结果集的内部指针递增 1:

$cmtc = $cmt->fetch(PDO::FETCH_ASSOC);

上面返回第零行并将指针移动到第一行。因此,当您进入 while 循环时,指针偏移 1,但什么也找不到:

while($row = $cmt->fetch(PDO::FETCH_ASSOC)){

【讨论】:

    【解决方案2】:

    原因是那一行:

    $cmtc = $cmt->fetch(PDO::FETCH_ASSOC);
    

    你应该简单地删除它。

    否则您获取第一条记录并且不将其分配给$comments 变量,然后在循环中您尝试获取从 2 到 n 的记录

    【讨论】:

      【解决方案3】:

      要获取查询的所有结果,请尝试以下操作:

      $cmt = $con->prepare("SELECT * FROM comments WHERE id = :id");
      $cmt->bindValue(':id', 1);
      $cmt->execute();
      $comments = $cmt->fetchAll(PDO::FETCH_ASSOC);
      

      附言。您的架构使用 id 作为主键,但您的查询使用 comment_post_id。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-27
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 2018-12-31
        • 2020-12-20
        相关资源
        最近更新 更多