PHP:从 MySQL 数据库检索多行

标签 php mysql sql database

我有一个带有评论的 MySQL 数据库,我正在尝试使用以下代码检索并显示它们:

$retrieve_reviews = "SELECT * FROM reviews WHERE PRODUCT_ID = $pid";
$do_retrieve_reviews = mysqli_query($connection, $retrieve_reviews);
if(mysqli_num_rows($do_retrieve_reviews) > 0) {
    while($review_row = mysqli_fetch_assoc($do_retrieve_reviews)) {
        echo '<div class="review" style="width:50%;height:200px;float:left;background:blue;display:inline;">';
        echo '<h1>' . $review_row["RATING"] . ' out of 5</h1><br>';
        echo '<p>' . $review_row["REVIEW"] . '</p>';
        echo '<h4>' . $review_row["CUSTOMER"] . '</h4>';
        echo '<h5>' . $review_row["REVIEW_DATE"] . '</h5>';
        echo '</div>';
    }
}

但是,始终只显示数据库中的最后一个条目。我在这里缺少什么? 感谢您的任何想法。

编辑: 在将这些语句添加到 while 循环中测试代码后:

var_dump(mysqli_num_rows($do_retrieve_reviews));
var_dump($review_row);

我得到这个结果:

int 3
array (size=6)
'REVIEW_ID' => string '10' (length=2)
'PRODUCT_ID' => string '10' (length=2)
'RATING' => string '4' (length=1)
'REVIEW' => string 'good board' (length=10)
'CUSTOMER' => string ' Jozo  Milan ' (length=13)
'REVIEW_DATE' => string '2015-04-26 00:00:00' (length=19)

int 3
array (size=6)
'REVIEW_ID' => string '11' (length=2)
'PRODUCT_ID' => string '10' (length=2)
'RATING' => string '2' (length=1)
'REVIEW' => string 'Very bad I dont know how can even sell that for so much.     Trash!' (length=63)
'CUSTOMER' => string ' Fero  Mrkva ' (length=13)
'REVIEW_DATE' => string '2015-04-26 00:00:00' (length=19)

int 3
array (size=6)
'REVIEW_ID' => string '12' (length=2)
'PRODUCT_ID' => string '10' (length=2)
'RATING' => string '4' (length=1)
'REVIEW' => string 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffff' (length=57)
'CUSTOMER' => string ' pooooo  hhhhhhh ' (length=17)
'REVIEW_DATE' => string '2015-04-26 00:00:00' (length=19)

哪些是正确的结果。但是,仅显示最后一个。非常困惑。

最佳答案

使用mysqli_fetch_assoc代替而不是mysqli_fetch_array

不同的函数会返回什么?

mysql_fetch_row

此函数将返回一行,其中的值将按照 SQL 查询中定义的顺序出现,并且键的范围将从 0 到比所选列数少 1。

mysql_fetch_assoc

此函数将返回一行作为关联数组,其中列名称将是存储相应值的键。

mysql_fetch_array

该函数实际上会返回一个数组,其中 mysql_fetch_row 和 mysql_fetch_assoc 的内容合并为一个。它将同时具有数字键和字符串键,使您能够以最简单的方式访问数据。

It is recommended to use either _assoc or _row though.

这段代码应该可以工作。

$retrieve_reviews = "SELECT * FROM reviews WHERE PRODUCT_ID = $pid";
$do_retrieve_reviews = mysqli_query($connection, $retrieve_reviews);
if(mysqli_num_rows($do_retrieve_reviews) > 0) {
    $review_row = mysqli_fetch_assoc($do_retrieve_reviews);
    foreach($review_row as $reviews) {
        echo '<div class="review" style="width:50%;height:200px;float:left;background:blue;display:inline;">';
        echo '<h1>' . $reviews["RATING"] . ' out of 5</h1><br>';
        echo '<p>' . $reviews["REVIEW"] . '</p>';
        echo '<h4>' . $reviews["CUSTOMER"] . '</h4>';
        echo '<h5>' . $reviews["REVIEW_DATE"] . '</h5>';
        echo '</div>';
    }
}  else {
    echo '<div class="review" style="width:50%;height:200px;float:left;background:blue;display:inline;">
    No Reviews available for this product yet.
    </div>';
}

关于PHP:从 MySQL 数据库检索多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29878378/

相关文章:

SQL:BETWEEN 和 IN(更快)

php - 我应该如何在 phpmyadmin 中导入一个巨大的表

php - 按不同组sql将学生分开

php - 处理 mysql 时遇到错误 - Ubuntu 14.04 (Ajenti V)

mysql - 如何使用索引在两列之间进行查询过滤

c# - SQL 命令不打印到标签

PHP 优化一个很长的 Switch Case 语句

php - 我可以在名称中没有 '[]' 的情况下在 PHP 中访问重复的 post 变量吗?

php - 设置或规避 MySql Sharding

sql - 如何在sql中搜索另一个范围内的值范围