提问人:Geerdes 提问时间:6/2/2023 最后编辑:Your Common SenseGeerdes 更新时间:6/2/2023 访问量:27
处理 mysqli 返回空值 [duplicate]
handling mysqli returned null value [duplicate]
问:
这个问题在这里已经有答案了:
多列的 MYSQL 总和返回 null(2 个答案)
我的 Select SUM 查询返回 null。它应该返回 0 (6 个答案)
如果未找到值,如何让 MySQL 中的 SUM 函数返回“0”? (4 个答案)
给变量一个默认值的最佳方法(模拟 Perl ||, ||= ) (8 个答案)
6个月前关闭。
我正在编写一个小型 Web 应用程序作为报告工具。我写了一个循环来获取每天的值,但是有一天我们的服务器出现了问题,并且缺少数据。当我在mySQL中运行查询时,我返回了NULL。我正在尝试编写一些错误处理,但它不能正常工作。我做错了什么?
$ath_q="SELECT SUM(performances*(TIME_TO_SEC(duration)/3600)) AS 'ATH'
from streamstats.livestats INNER JOIN streamstats.library USING(artist,song)where ts BETWEEN ? AND ?";
$i=0;
$dailyATH=[];
echo count($dateRange)."</br>";
while ($i < count($dateRange)){
//echo $i."</br>";
$athStart=$dateRange[$i]." ".$dayStart;
$athEnd=$dateRange[$i]." ".$dayEnd;
echo $athStart."-".$athEnd."</br>";
$athStmt=$mysqli->prepare($ath_q);
$athStmt->bind_param('ss',$athStart,$athEnd);
$athStmt->execute();
$athResult=$athStmt->get_result();
if ($dATH=$athResult->fetch_column()){
if ($dATH===null){
echo "no value";
}
echo $athStart."-".$athEnd."=".$dATH."</br>";
//array_push($dailyATH,$dATH);
}
$i++;
}
当前结果如下所示。
2023-05-01 00:00:00-2023-05-01 23:59:59=1373.2289
2023-05-02 00:00:00-2023-05-02 23:59:59
2023-05-02 00:00:00-2023-05-02 23:59:59=2561.0925
2023-05-03 00:00:00-2023-05-03 23:59:59
2023-05-03 00:00:00-2023-05-03 23:59:59=6065.2980
2023-05-04 00:00:00-2023-05-04 23:59:59
2023-05-05 00:00:00-2023-05-05 23:59:59
2023-05-05 00:00:00-2023-05-05 23:59:59=3681.4305
2023-05-06 00:00:00-2023-05-06 23:59:59
2023-05-06 00:00:00-2023-05-06 23:59:59=8739.7841
如果您在 2023-05-04 上注意到,没有数据,它会跳到下一个。我正在尝试捕获 null 并将其设置为 0,但似乎我什至无法捕获 null 数据。任何帮助将不胜感激。
答:
0赞
Barmar
6/2/2023
#1
使用 null 合并运算符而不是语句。if
$dATH = $athResult->fetch_column() ?? 0;
echo $athStart."-".$athEnd."=".$dATH."</br>";
//array_push($dailyATH,$dATH);
您也可以在 SQL 中执行此操作:
SELECT IFNULL(SUM(performances*(TIME_TO_SEC(duration)/3600)), 0) AS 'ATH'
评论
0赞
Geerdes
6/2/2023
谢谢Barmar。我在if语句中添加了else语句,这很好。
0赞
Barmar
6/2/2023
我删除了这个语句,因为你说你想把它当作 0。所以没有地方放.if
else
0赞
Geerdes
6/2/2023
我用 else 语句将 0 写入到存储数据的数组中。
评论
if ($dATH=$athResult->fetch_column()){
已检查该值是否为 nullelse { echo "no value"; }