Php 你把开始放在saction()上了吗;在“try”块之前或之内

Php 你把开始放在saction()上了吗;在“try”块之前或之内,php,transactions,Php,Transactions,我该怎么办 $dbh->beginTransaction(); try{ 或 将其添加到try/catch块中,这样您就可以捕获任何PDOException: try { $dbh->beginTransaction(); // start transaction $stmt = $dbh->query($query); // run your query $dbh->commit(); // commit } c

我该怎么办

$dbh->beginTransaction();
try{


将其添加到
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
}

如果您想捕获BeginTransaction方法应该抛出的可能错误,请转到第二个错误。

这并不重要,它将不考虑其位置而运行代码。 但是您希望将
回滚()
放在
捕获
中,如果将
开始
放在外部,则该设置不可读


我会在
try
中投票,在这种情况下,这无关紧要,因为失败时beginTransaction将返回false。如果它抛出异常,您可能希望它位于嵌套的try块中(否则,您将在捕获异常后执行rollBack(),该异常将失败,因为没有启动任何事务)。

这可能并不重要。但是,最好将
beginTransaction
放在
try
之外。当
beginTransaction
失败时,它不应执行
回滚

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
}