2014-05-03 127 views
0

我有麻煩解決以下問題。讓我們假設我有這樣的:有例外的PDO交易

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

錯誤...我確定你正確地試圖將日誌保存到**相同的數據庫,只是失敗了嗎?** –

+0

'功能DeleteUser(UserID)'該參數不知何故不是變量? –

+0

這是,我只是用手輸入整個代碼,所以這裏輸入一個:) 是的,對於同一個數據庫,但沒有問題,因爲錯誤不是PDOException,而是我的自定義異常指示某些錯誤 – user3370402

回答

1

您需要$ Pdo-> rollback()才能恢復catch塊中的數據庫更改,並告訴用戶錯誤。

+0

我想你是對的..我以前怎麼會沒有發現身份證,我必須過度勞累.. – user3370402