使 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.
}
我的应用程序构建由用户创建的动态报告,这些报告可能会生成 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.
}