PHP 用于检查 MySQL 字段是否为零的比较运算符

PHP Comparison Operator to Check If MySQL Field Equals Zero

维护一个青年体育联盟网站,其中包含通过 HTML 前端显示的日程表和排名,并使用 PHP 与 MySQL 后端数据库进行通信。几年来一切都运行良好,但我最近遇到了一个大问题,分数被无意中报告了多次,我正试图堵住允许它发生的漏洞。

下面是我试图添加到分数报告脚本中的 PHP 代码的一小段摘录。思路是查询MySQL数据库,查看所选比赛的主客场比分当前是否为“0”。如果是,则尚未报告分数并且可以执行脚本。但是,如果它们是任何其他值,那么我希望脚本停止。

测试时,无论游戏是否被举报,脚本都会以 "already reported" 消息终止。 我认为我尝试实现的比较运算符有问题。 任何人都可以指出我似乎缺少的关于代码的明显内容吗?一点指导将不胜感激!

// Check to see if game has already been reported:
$qh = "SELECT home_score FROM $table WHERE game_id=$row[0]";
$hscore = mysqli_query($db, $qh);
$qa = "SELECT away_score FROM $table WHERE game_id=$row[0]";
$ascore = mysqli_query($db, $qa);
if ($hscore != 0 || $ascore != 0) {
    echo "The scores for this game have already been reported. Please try refreshing your browser on the schedule page to verify.";
} else {

函数mysqli_query returns a mysqli_result object所以你需要获取它来获取实际值。我想这样就可以了。

$qh = "SELECT home_score FROM $table WHERE game_id=$row[0]";
$hscore = mysqli_stmt_fetch(mysqli_query($db, $qh));
$qa = "SELECT away_score FROM $table WHERE game_id=$row[0]";
$ascore = mysqli_stmt_fetch(mysqli_query($db, $qa));
if ($hscore['home_score'] != 0 || $ascore['away_score'] != 0) {
    echo "The scores for this game have already been reported. Please try refreshing your browser on the schedule page to verify.";
} else {

另一种方法是确保分数大于 0。

SELECT home_score FROM $table WHERE game_id=$row[0] and home_score > 0

然后你需要知道你得到的一行是否大于 0。

我认为这种方法是你最好的方法(未经测试)..

$qh = "SELECT home_score, away_score FROM $table WHERE game_id=?";
$hscore = mysqli_prepare($db, $qh);
mysqli_stmt_bind_param($hscore, 'i', $row[0]);
mysqli_stmt_execute($hscore);
$unique_row = mysqli_fetch_row($hscore);
if ($unique_row['home_score'] != 0 || $unique_row['away_score'] != 0) {
    echo "The scores for this game have already been reported. Please try refreshing your browser on the schedule page to verify.";
} else {

假设 $row[0] 是一个整数。

只需编写 1 个查询来获取两个分数,然后您就可以轻松地比较它们以显示您想要的结果。

// Check to see if game has already been reported:
$q = "SELECT home_score, away_score FROM $table WHERE game_id=$row[0]";
$result = mysqli_query($db, $q);
$scores = $result->fetch_assoc();
if ($scores['home_score'] != 0 || $scores['away_score'] != 0) {
    echo "The scores for this game have already been reported. Please try refreshing your browser on the schedule page to verify.";
} else {

fetch_assoc() 方法获取从 MySQL 返回的结果的第一行作为关联数组,这使得它很好用且易于使用。 :)