让ZF2不要在零查询上停止

时间:2015-08-05 21:58:31

标签: php postgresql zend-framework2 postgresql-8.4

我的应用程序构建用户创建的动态报告,这些报告可能会生成以零除的返回的查询 当发生这种情况时,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,
),

脚本仍会停止并显示我的自定义"错误"页面,唯一的区别是它隐藏了异常细节。

即使出现division by zero,如何保持脚本/应用程序正常运行?

我已经看到其他问题在讨论display_exceptions=false,但正如您所看到的那样,它并没有帮助我。

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

2 个答案:

答案 0 :(得分:1)

您可以通过尝试捕获查询来自己捕获异常

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

答案 1 :(得分:0)

在您的脚本中,您是否考虑过在实际计算之前分母是否等于0 ?如果是,您可以跳过计算并直接返回字符串或其他数字。这样你就可以避免除以零错误。

实施例

function getStatistics($returned_value) {

    if ($returned_value  == 0) {

      //Cannot compute
      return "Impossible";

    } else {

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

    }

}