PHP:从MySQL数据库中检索多行

时间:2015-04-26 13:40:43

标签: 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)

哪个是正确的结果。但是,只显示最后一个。非常混乱。

1 个答案:

答案 0 :(得分:0)

使用mysqli_fetch_assoc instead

mysqli_fetch_array

不同的功能会返回什么?

mysql_fetch_row

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

mysql_fetch_assoc

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

mysql_fetch_array

此函数实际上将返回一个数组,其中mysql_fetch_row和mysql_fetch_assoc的内容合并为一个。它将具有数字和字符串键,可让您以任何最简单的方式访问数据。

  

建议使用_assoc或_row。

此代码应该有效。

$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>';
}