我的应用程序构建用户创建的动态报告,这些报告可能会生成以零除的返回的查询
当发生这种情况时,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
,但正如您所看到的那样,它并没有帮助我。
我更喜欢不改变查询创建过程的解决方案,因为它非常复杂,但我正在考虑所有建议。
答案 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
}
}