我有一个带有评论的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)
哪个是正确的结果。但是,只显示最后一个。非常混乱。
答案 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>';
}