使 ZF2 在被零查询除法时不停止

Make ZF2 don't stop on division by zero query

我的应用程序构建由用户创建的动态报告,这些报告可能会生成 return 除以零的查询。
发生这种情况时,ZF2 使用 Zend\Db\Adapter\Exception\InvalidQueryException 捕获它以显示异常并停止我的脚本。

即使发生这种情况,我也需要继续执行脚本,因为应用程序会在这些计算中显示 0,并且报告仍会显示。

我已经在 config/autoload/local.php 中禁用了这些设置,并确保 global.php 不会覆盖它们:

'phpSettings'   => array(
    'display_startup_errors' => false,
    'display_errors'         => false,
    'error_reporting'        => 0,
),

'view_manager' => array(
    'display_not_found_reason' => false,
    'display_exceptions'       => false,
),

脚本仍然停止并显示我的自定义 "error" 页面,唯一的区别是它隐藏了异常详细信息。

如何在 division by zero 发生时保持 script/application 运行?

我已经看到其他关于 display_exceptions=false 的问题,但如您所见,它对我没有帮助。

我更喜欢不更改查询创建过程的解决方案,因为它非常复杂,但我接受所有建议。

在您的脚本中,您是否考虑过在 实际计算之前测试分母是否等于 0 ?如果是,则可以跳过计算,直接 return 一个字符串或另一个数字。这样你就可以避免 除以零 错误。


示例

function getStatistics($returned_value) {

    if ($returned_value  == 0) {

      //Cannot compute
      return "Impossible";

    } else {

      //Do the calculation
      return 100/$returned_value; //For example      

    }

}

您可以通过围绕查询进行 try catch 来自己捕获异常

try {
    // try to run the query that might throw the exception.
} catch (\Zend\Db\Adapter\Exception\InvalidQueryException $e) {
    // do set the result to zero.
}