PHP中如何将MySQL查询返回的Null变量值替换为0显示
解决方案
有两种常用实现方式,可根据需求选择:
方案1:MySQL查询层面直接处理(推荐)
用MySQL内置的IFNULL()函数直接对计算字段做Null值转换,查询结果直接返回0无需后端额外处理:
// 修正SQL使用PDO参数绑定避免注入风险,同时处理Null值 $sqls = "SELECT IFNULL((@days := a.days + @days), 0) AS availed_days, days from tblleaves a, (SELECT @days:=0) c where LeaveType = :type AND empid = :eid ORDER BY availed_days desc "; $querys = $dbh -> prepare($sqls); // 绑定两个参数,原写法直接拼接变量有SQL注入风险 $querys->bindParam(':type', $type, PDO::PARAM_STR); $querys->bindParam(':eid', $eid, PDO::PARAM_STR); $querys->execute(); $results = $querys->fetchAll(PDO::FETCH_OBJ); $avail = 0; // 初始化默认值为0,兼容无查询结果的场景 if($querys->rowCount() > 0) { foreach($results as $result) { $avail = $result->availed_days; } } ?> <input value="<?php echo $avail?>" id="avail_days" name="avail_days" type="text">
方案2:PHP层面做Null值判断
如果不想改SQL,也可以在PHP赋值阶段处理Null值:
// PHP7+支持null合并运算符?? $avail = $result->availed_days ?? 0; // 低于PHP7版本用三目运算符兼容: // $avail = is_null($result->availed_days) ? 0 : $result->availed_days;
注意:原有代码中PDO预处理只声明了绑定
:eid参数,但SQL语句里直接拼接了$type和$eid变量,没有使用占位符,存在SQL注入风险,建议统一改为参数绑定写法。
内容的提问来源于stack exchange,提问作者Kulikarai GHSS
相关产品推荐
相关产品推荐

