PHP PDO输出用户定义的异常

时间:2017-01-22 10:27:27

标签: php oracle stored-procedures pdo exception-handling

我有一个(示例)Oracle存储过程:

CREATE OR REPLACE FUNCTION EXCEPTION_TEST
  RETURN NUMBER
AS 
BEGIN
  raise_application_error(-20500, 'This is the exception text I want to print.');
END;

我在PHP中用PDO调用它,代码如下:

$statement = $conn->prepare('SELECT exception_test() FROM dual');
$statement->execute();

函数的调用完全正常,但现在我只想打印Exception文本。

我在某处读过,你不应该使用try和catch PDO。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您已经读过,您不应该在报告中发现错误。

但是,如果你想以某种方式处理,那么抓住它就可以了。

基于我在handling exception in PDO上的文章中的示例,

try {
    $statement = $conn->prepare('SELECT exception_test() FROM dual');
    $statement->execute();
} catch (PDOException $e) {
    if ($e->getCode() == 20500 ) {
        echo $e->getmessage();
    } else {
        throw $e;
    }
}

在这里,你要么得到你的特定错误,要么重新抛出异常以使其以通常的方式处理

答案 1 :(得分:0)

检查执行响应并获取错误,例如,如下所示:

if ($statement->execute() != true) {
    echo $statement->errorCode();
    echo $statement->errorInfo();
}

您可以在PDO manual找到更多选项。