验证邮件中没有投票时出错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."; 
} 
+0

,可尝试get_result() - > FETCH_ASSOC()或者甚至更好,而不是使用的mysqli PDO。它让人的眼睛流血看到这些重复变量的墙 –

+0

@YourCommonSense并不是所有的PDO都很深,我更喜欢mysqli :) – AmLy

+0

顺便说一句,用PDO你目前的问题不存在。继续喜欢mysqli –

您不应该使用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."; 
}