我很好奇哪個是在事務中使用Try/Catch的最佳實踐。哪一個更好,爲什麼?在事務中嘗試/捕獲 - 與使用PHP或SQL有什麼不同?
在做的try/catch只是在PHP代碼:
$dbh->begintransaction();
try {
$insert = "INSERT INTO test (id) VALUES(1)";
$stpm = $dbh->prepare($insert);
$stpm->execute();
$dbh->commit();
} catch (\Exception $e) {
$dbh->rollback();
}
在SQL
或者直接:
$insert = "BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO test (id) VALUES(1)
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;";
$stpm = $dbh->prepare($insert);
$stpm->execute();
您的第一個示例使用由try catch包圍的SQL事務。這對我來說是遵循的方式 – Mcsky
就我所知,一個簡單的插入是原子的,不需要將其包含在事務中並將其回滾。如果失敗,則失敗。然而,總的想法是在PHP代碼中進行。 SQL版本我只是用於準備好的語句。 – apokryfos
PHP版本看起來更漂亮:D –