代码之家  ›  专栏  ›  技术社区  ›  Ariod

在PHP中捕获运行时异常

  •  3
  • Ariod  · 技术社区  · 15 年前

    我正在尝试捕获一个运行时异常,该异常将由一个基本上只是oci_execute()的包装函数的函数引发。例如:

    try {   
        $SQL = "INSERT";
        ExecuteQuery($SQL);
    } catch (Exception $e) {
        echo "<p>There was an error.</p>";
        echo $e->getMessage();
    }
    

    但是,似乎没有捕捉到异常:

    ...
    ociexecute() [function.ociexecute]: ORA-00925: missing INTO keyword
    ...
    

    我是不是错过了什么?

    2 回复  |  直到 15 年前
        1
  •  7
  •   Greg    15 年前

    看起来它触发了一个错误而不是抛出一个异常。

    可以使用将错误转换为异常 set_error_handler() -像这样:

    function errorHandler($number, $string, $file = 'Unknown', $line = 0, $context = array())
    {
        if (($number == E_NOTICE) || ($number == E_STRICT))
            return false;
    
        if (!error_reporting())
            return false;
    
        throw new Exception($string, $number);
    
        return true;
    }
    
    set_error_handler('errorHandler');
    
        2
  •  0
  •   usoban    15 年前

    它看起来不像是一个异常,更像是一个普通的PHP错误。

    如果是,请检查是否有每个加速器以及您拥有的版本。前一段时间我遇到了一个问题,有一个加速器错误没有捕捉到异常,我不得不关闭它:|