我很好奇哪个是在事务中使用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 –