抛出异常而不停止执行?

时间:2012-02-29 18:55:20

标签: php mysql exception exception-handling

我已经在我正在研究的项目中挖了一个洞。我有这个庞大的项目(成千上万行),并且到处都有MySQL错误。我现在正在清理它们。

我有这个所有查询都经过的数据库类,所以我所做的就是每当出现SQL错误时,我现在就抛出一个异常。问题是我无法执行停止。它必须像往常一样继续,并且只记录异常,以便我可以跟踪它们并一次修复它们。

我希望set_exception_handler可以做我想要的,但是文档特别说它会在调用我的处理程序后停止执行。那么我该如何解决这个问题?

异常可以暂停当前函数,但后来我希望它退出函数,可能返回null或false,然后继续正常,但我需要它来调用我的全局异常处理程序。


澄清:

我想从我的数据库类中抛出异常(每当出现SQL错误时)。然后,我想记录此错误和/或在屏幕上显示一条消息,直到我可以修复SQL错误,或者在try / catch中包装违规行。我不希望它停止执行。如果我只是调用一些error_handler()函数而不是抛出异常,那么我就无法理解它。如果我立即捕获它(也在DB类中),那么我无法在堆栈中进一步捕获它(除非我重新抛出它,但之后我们又回到停止执行)。

3 个答案:

答案 0 :(得分:1)

如果我理解正确的话:

function myFunction($params) {

    try {

        //your code which throws Exception

    } catch (Exception $e) {

        myErrorFunction($e);
        return false;
    }

}

答案 1 :(得分:0)

我想我找到了一个解决方法。我可以直接调用我的处理程序,而不是抛出异常:

global_exception_handler(new MySqlException($error_message)); 

这样我的处理程序仍会被调用,但执行仍在继续。

然后,仍然可以使用相同的异常处理程序来捕获实际抛出的所有其他异常:

function _global_exception_handler($e) {
    // log error here
}

set_exception_handler('global_exception_handler');

答案 2 :(得分:0)

我知道旧帖子,但我也问了这个问题,发现答案是在您使用 try catch(Exception) 的顶部添加这一行:

<块引用>

使用异常;