PHP,PDO和例外

时间:2011-08-25 09:41:32

标签: php pdo exception-handling

我目前处于PDO的两难境地。我最近转而使用自己的自定义数据库类,因为我想利用事务。我面临的问题是如何从已经用try / catch for PDO包装的代码块中抛出异常。这是一个例子......

try {
    // PDO code

    // Transaction start

    // Throw manual exception here if error occurs (transaction rollback too)

   // Transaction commit

} catch (PDOException $e) {
    // Transaction rollback
    // Code to handle the exception
}

采用上面的代码示例,并牢记PHP手册说; “你不应该从你自己的代码中抛出PDOException”。我如何处理自己的异常 PDO?某种嵌套?

3 个答案:

答案 0 :(得分:5)

try {
    // PDO code

    // Transaction start

    // Throw manual exception here if error occurs (transaction rollback too)
    throw new MyException("all went tits up");

   // Transaction commit

} catch (PDOException $e) {
    // Transaction rollback
    // Code to handle the exception
} catch (MyException $e) {
    // Transaction rollback
    // Code to handle the exception   
}

问题是,你将会有重复的代码,这些代码不会闻起来太好。我建议只捕捉“例外”,例如:

try {
    // PDO code

    // Transaction start

    // Throw manual exception here if error occurs (transaction rollback too)
    throw new MyException("all went tits up");

   // Transaction commit

} catch (Exception $e) {
    // Transaction rollback
    // Code to handle the exception
}

答案 1 :(得分:1)

try{
    //code here
}
catch(PDOException $e){
    //handle PDO
    throw $e; //to rethrow it upper if need
}
catch(Exception $e){
    //handle any other
}

答案 2 :(得分:-2)

如果出现问题,PDO将产生异常。但是如果你在db中进行了一些更改并希望恢复所有可以运行的

throw new PDOException(....);