Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Query returns one post late

So I have a query that gets all the posts in the database. Say I post a post, it won't show, till I post another post. So essentially there's a post delay, until you post another post. That's the best I can explain it. Here's my query

SELECT * FROM comments WHERE comment_post_id = :id

Then I create an array

//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']
    );
}

And finally display it

<?php foreach($comments as $comment){?>
<h1 class="message"><?php echo $comment['comment_content']?></h1>
<?php } ?>

I'm not getting any errors, but when I run the query in the command line I get one result. But when I visit the page I don't see any results.

Here's the structure

+-----------------+------------------+------+-----+---------+----------------+
| 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    |                |
+-----------------+------------------+------+-----+---------+----------------+
like image 392
idris Avatar asked Sep 18 '26 10:09

idris


2 Answers

Your first call to fetch automatically increments the internal pointer of the result set by one after fetching the row:

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

The above returns the zeroth row and moves the pointer to the first row. So, when you get to your while loop, the pointer is offest by one, and nothing is found:

while($row = $cmt->fetch(PDO::FETCH_ASSOC)){
like image 188
oliakaoil Avatar answered Sep 19 '26 23:09

oliakaoil


The reason is that line:

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

You should simple remove it.

Otherwise you fetch first record and don't assign it to $comments variable and then in loop you try to get records from 2 to n

like image 26
Marcin Nabiałek Avatar answered Sep 19 '26 23:09

Marcin Nabiałek



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!