我目前处于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?某种嵌套?
答案 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(....);