【问题标题】:How to return 0 when the query return NULL [closed]查询返回NULL时如何返回0 [关闭]
【发布时间】:2021-01-14 23:53:31
【问题描述】:

我的 php 查询如下所示:

<?php 
$raw_results = mysql_query("SELECT Operator, Data_przegladu, IFNULL(COUNT( Operator ),0) AS operator_count 
                            FROM przeglad 
                            WHERE MONTH(Data_przegladu) = 1 
                              AND Operator = \"Adrian Pikus\" 
                            HAVING (COUNT( Operator ) > 1)") or die(mysql_error());       
$row = mysql_fetch_array($raw_results);
echo $row['operator_count'];
?>

结果为 NULL,但我希望结果为 0。有人可以帮助我吗?我使用的是 PHP 5.2,但无法更新

【问题讨论】:

  • 结果为NULL你的意思是查询返回空行集吗?
  • 如果查询没有返回任何行,那么operator_count 是一个未定义的索引。如果查询成功运行,您应该点击IFNULL() 函数。
  • 警告: mysql_* 扩展自 PHP 5.5.0 起已弃用,自 PHP 7.0.0 起已被删除。相反,应该使用mysqliPDO_MySQL 扩展名。在选择 MySQL API 时,另请参阅 MySQL API Overview 以获得更多帮助。
  • 你今天已经问过this question。请不要滥用系统重新提问。
  • COUNT( Operator ) 何时为 NULL?您不能在始终返回整数的函数上检查 NULL。你到底在问什么?

标签: php mysql php-5.2


【解决方案1】:

我认为 null 合并运算符应该可以解决问题:

适用于 php 7 及以上版本

echo $row['operator_count'] ?? 0;

适用于所有版本

echo $row['operator_count'] ? $row['operator_count'] : 0;

如果$row['operator_count']不为空,则两者都将打印,否则为0;

【讨论】:

  • 这不适用于 OP 正在使用的 PHP 5.2。
  • 我已经编辑了我的答案,请看一下。
  • 回声 $row['operator_count'] ? $row['operator_count'] : 0; - 这行得通!谢谢!
  • 仅供参考 - 这会导致 undefined index 通知。使用isset()
  • 这两个不一样。正如 Qirel 指出的那样,第二个会导致错误。此外,查询返回应该定义的COUNT( Operator ) 的结果。在这种情况下需要更正 SQL。 OP 在 HAVING 子句中使用聚合函数,这可能会为它们产生 0 个结果。如果你想在 PHP 中检查,你需要使用 if($row) 而不是三元
【解决方案2】:
$row = is_null($row) ? 0 : $row;

您可以使用is_null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2013-04-28
    • 2019-06-14
    • 2020-01-07
    相关资源
    最近更新 更多