You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中if语句导致值为0的数据无法显示的问题咨询

问题分析与解决方案

嘿,我一眼就看出问题所在了!这是PHP松散类型系统带来的典型“坑”——你写的内层if判断条件,用了$row['datum'] AND $row['v'] AND ...这种方式,而PHP会把数值0、空字符串""、null这些值自动转换为布尔值false。所以哪怕数据库里确实存着0这个有效值,也会被这个条件直接过滤掉,导致对应的表格行根本不会输出到页面上;而var_dump()能看到是因为它会如实输出变量的原始值,不会做布尔转换。

具体修正方案

根据你的需求,有两种常见的修正方式:

1. 直接移除多余的内层判断(推荐,如果你不需要过滤任何行)

外层已经通过$resultCheck > 0确认了有数据,while循环也会遍历每一条查询结果。如果你的需求是显示所有查询到的行,不管字段值是0还是其他,那内层的if判断完全是多余的,直接去掉就行:

<?php 
include_once 'dbh.inc.php'; 
$sqli = "SELECT datum, v, vo, nav FROM months;"; 
$result = mysqli_query($conn, $sqli); 
$resultCheck = mysqli_num_rows($result); 

echo "<table>"; 
echo "<tr>"; 
echo "<th>Datum</th>"; 
echo "<th> Vakantie uren</th>"; 
echo "<th> Vakantie uren opgennomen </th>"; 
echo "<th> Nieuw aantal vakantie uren</th>"; 
echo "</tr>"; 

if ($resultCheck > 0) { 
    while ($row = mysqli_fetch_assoc($result)) { 
        // 去掉原来的if条件,直接输出每一行
        echo "<tr>";
        echo "<td>" . $row['datum'] . "</td>";
        echo "<td>" . $row['v'] . "</td>";
        echo "<td>" . $row['vo'] . "</td>";
        echo "<td>" . $row['nav'] . "</td>";
        echo "</tr>";
    }
}
echo "</table>";
?>

2. 精确判断字段有效性(如果需要过滤null/空字符串但保留0)

如果你的需求是过滤掉字段为null或空字符串的行,但保留0这种有效值,就需要用严格的比较来区分:

<?php 
include_once 'dbh.inc.php'; 
$sqli = "SELECT datum, v, vo, nav FROM months;"; 
$result = mysqli_query($conn, $sqli); 
$resultCheck = mysqli_num_rows($result); 

echo "<table>"; 
echo "<tr>"; 
echo "<th>Datum</th>"; 
echo "<th> Vakantie uren</th>"; 
echo "<th> Vakantie uren opgennomen </th>"; 
echo "<th> Nieuw aantal vakantie uren</th>"; 
echo "</tr>"; 

if ($resultCheck > 0) { 
    while ($row = mysqli_fetch_assoc($result)) { 
        // 用严格比较确保字段不是null也不是空字符串,但允许0
        if( ($row['datum'] !== null && $row['datum'] !== '') && 
            ($row['v'] !== null && $row['v'] !== '') && 
            ($row['vo'] !== null && $row['vo'] !== '') && 
            ($row['nav'] !== null && $row['nav'] !== '') ) {
            echo "<tr>";
            echo "<td>" . $row['datum'] . "</td>";
            echo "<td>" . $row['v'] . "</td>";
            echo "<td>" . $row['vo'] . "</td>";
            echo "<td>" . $row['nav'] . "</td>";
            echo "</tr>";
        }
    }
}
echo "</table>";
?>

补充说明

PHP的松散类型转换虽然灵活,但很容易在判断数值时踩坑。记住这几个关键点:

  • 0、""、null、false、array()在布尔判断中都会被视为false
  • 用===/!==进行严格比较可以避免类型转换带来的意外
  • empty(0)会返回true,所以如果要保留0,不要用empty()来判断

内容的提问来源于stack exchange,提问作者user8938318

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:15:37