你把beginTransaction();在`try`块之前或之内

时间:2012-09-16 00:09:14

标签: php transactions

我应该

$dbh->beginTransaction();
try{

或者

try{
  $dbh->beginTransaction();

5 个答案:

答案 0 :(得分:4)

这并不重要,它将运行代码无关紧要的位置。 但是您想将rollback()放在catch中,如果您将begin放在外面,那么使用该设置就无法读取。

我会在try内投票。

答案 1 :(得分:1)

将其添加到try / catch块中,以便您可以抓住任何PDOException

try {
    $dbh->beginTransaction();    // start transaction
    $stmt = $dbh->query($query); // run your query
    $dbh->commit();              // commit
} catch(PDOException $ex) {      // if exception, catch it
    $dbh->rollBack();            // rollback query
    echo $ex->getMessage();      // echo exception message
}

答案 2 :(得分:0)

如果你想捕捉beginTranscation方法应该抛出的可能错误,请转到第二个。

答案 3 :(得分:0)

在这种情况下无关紧要,因为beginTransaction在失败时将返回false。如果它抛出了异常,你会希望它在一个嵌套的try块中(否则你会在捕获因为没有启动事务而失败的异常后执行rollBack())。

答案 4 :(得分:0)

这可能并不重要。但是,最好将beginTransaction 置于<{1}}之外。当try失败时,它不应执行beginTransaction