处理 mysqli 返回空值 [duplicate]

handling mysqli returned null value [duplicate]

提问人:Geerdes 提问时间:6/2/2023 最后编辑:Your Common SenseGeerdes 更新时间:6/2/2023 访问量:27

问:

我正在编写一个小型 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 数据。任何帮助将不胜感激。

php mysqli

评论

0赞 Dharman 6/2/2023
捕获空值是什么意思?哪个值应该为 null,为什么?
2赞 Dharman 6/2/2023
if ($dATH=$athResult->fetch_column()){已检查该值是否为 null
0赞 Geerdes 6/2/2023
@Dharman,谢谢。所以我在错误的地方处理错误,这就是听起来的样子。我应该如何处理?
0赞 Barmar 6/2/2023
else { echo "no value"; }
0赞 Geerdes 6/2/2023
else 语句修复了它。谢谢!

答:

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。所以没有地方放.ifelse
0赞 Geerdes 6/2/2023
我用 else 语句将 0 写入到存储数据的数组中。