簡體   English   中英

是否可以在PDO事務中使用try catch異常?

[英]Can I use try catch exceptions into PDO transactions?

這是我的腳本:

$id    = $_GET['id'];
$value = $_GET['val'];

// database connection here

try{
    $db_conn->beginTransaction();                               // this

    $stm1 = $db_conn->prepare("UPDATE table1 SET col = "updated" WHERE id = ?");
    $stm1->execute(array($value));
    $done = $stm->rowCount();

    if ($done){
        try {
            $stm2 = $db_conn->prepare("INSERT into table2 (col) VALUES (?)");
            $stm2->execute(array($id));

        } catch(PDOException $e){
            if ((int) $e->getCode() === 23000) {  // row is duplicate
                $stm3 = $db_conn->prepare("DELETE FROM table2 WHERE col = ?");
                $stm3->execute(array($id));
            }
        }

    } else {
        $error = true;
    }

    $db_conn->commit();                                          // this
}
catch(PDOException $e){
    $db_conn->rollBack();
}

首先,我必須說,我的腳本有效。 我的意思是結果或測試中預期的結果。 只是一件事嚇到我了。 我閱讀了文檔,看到了這句話:

這是行不通的,而且很危險,因為您可能使用嵌套的commit()太早關閉事務。

我不確定上面的句子是什么意思,據我了解,也許我不應該在beginTransaction()commit()之間使用嵌套的try - catch 好吧,我說對了嗎? 這樣做很危險嗎?

異常與交易沒有直接關系。 您可以根據需要在代碼中添加任意數量的catch塊。

考慮到您已經將PDO錯誤報告設置為Exceptions,因此您的代碼就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM