[英]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.