验证邮件中没有投票时出错PHP
问题描述:
当没有投票和同一个打印零的所有查询时,我想显示一条错误消息,说没有对此产品的投票。验证邮件中没有投票时出错PHP
问题是,没有验证总是向我显示消息说,当事实上如果有票时没有这个产品的投票。
如何在没有产品投票时正确验证错误消息?
<?php
$id_product = "1";
$stmtRating = $con->prepare("SELECT SUM(rating IN (4.5, 5))/COUNT(*)*100 AS pct_5_star,
SUM(rating IN (3.5, 4))/COUNT(*)*100 AS pct_4_star,
SUM(rating IN (2.5, 3))/COUNT(*)*100 AS pct_3_star,
SUM(rating IN (1.5, 2))/COUNT(*)*100 AS pct_2_star,
SUM(rating IN (0.5, 1))/COUNT(*)*100 AS pct_1_star,
SUM(CASE WHEN rating IN (4.5, 5) THEN rating ELSE 0 END) AS in_5_star,
SUM(CASE WHEN rating IN (3.5, 4) THEN rating ELSE 0 END) AS in_4_star,
SUM(CASE WHEN rating IN (2.5, 3) THEN rating ELSE 0 END) AS in_3_star,
SUM(CASE WHEN rating IN (1.5, 2) THEN rating ELSE 0 END) AS in_2_star,
SUM(CASE WHEN rating IN (0.5, 1) THEN rating ELSE 0 END) AS in_1_star,
AVG(rating) AS avg_rating,
SUM(rating) as avg_total,
COUNT(*) valuations
FROM ratings
WHERE id_product=?");
$stmtRating->bind_param("i",$id_product);
$stmtRating->execute();
$stmtRating->bind_result(
$pct_5_star,
$pct_4_star,
$pct_3_star,
$pct_2_star,
$pct_1_star,
$in_5_star,
$in_4_star,
$in_3_star,
$in_2_star,
$in_1_star,
$avg_rating,
$avg_total,
$valuations
);
//$stmtRating->fetch();
if ($stmtRating->num_rows>0) {
while ($stmtRating->fetch()) {
echo "$valuations <br>
$pct_5_star <br>
$pct_4_star <br>
$pct_3_star <br>
$pct_2_star <br>
$pct_1_star <br>
$in_5_star <br>
$in_4_star <br>
$in_3_star <br>
$in_2_star <br>
$in_1_star <br>
$avg_rating <br>
$avg_total <br>
$valuations
";
}
} else {
echo "There are no votes for this product.";
}
答
您不应该使用num_rows来验证任何内容。这是不可靠和无用的。
在你的情况下,你可以使用fetch()的结果来查看你的查询是否返回任何东西。
if ($stmtRating->fetch()) {
echo "$valuations <br>
...
";
}
} else {
echo "There are no votes for this product.";
}
请注意,要保持代码大小在控制之下,您应该使用PDO而不是mysqli。整个过程将缩短100倍:在上帝的份上
$id_product = "1";
$sql = "SELECT SUM(rating IN (4.5, 5))/COUNT(*)*100 AS pct_5_star ...";
$stmtRating = $con->prepare($sql);
$stmtRating->execute([$id_product]);
$rating = $stmtRating->fetch()
if ($rating) {
foreach ($rating as $value) echo "$value<br>";
} else {
echo "There are no votes for this product.";
}
,可尝试get_result() - > FETCH_ASSOC()或者甚至更好,而不是使用的mysqli PDO。它让人的眼睛流血看到这些重复变量的墙 –
@YourCommonSense并不是所有的PDO都很深,我更喜欢mysqli :) – AmLy
顺便说一句,用PDO你目前的问题不存在。继续喜欢mysqli –