我遇到了解决以下问题的麻烦。让我们假设我有这个:
class UserMapper{
private $Pdo;
function __construct(PDO $Pdo) {
$this->Pdo = $Pdo;
}
function DeleteUser(UserID){
try{
$Pdo->beginTransaction();
// some logic here which eventually throws exception
$Pdo->commit();
}
catch(Exception $e){
// exception thrown from the upper code goes here
// I need to log error with further details into some event log, e.g. like this
$EventLog->LogEvent("error occured" . $e->getMessage()); //
}
}
上面代码的问题在于,如果捕获了异常,那么Pdo当前位于" beginTranstacion"状态,因此日志不会在数据库中更新。
嗯,这可以通过在catch事件中提交来修复,但是当没有异常时它会导致问题。
有没有解决方法我可能会失踪?
答案 0 :(得分:1)
您需要$ Pdo-> rollback()来恢复catch块中的数据库更改并告诉您的用户出错了。