Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Transações PHP, MySQL, PDO - O código dentro do bloco try para no commit()?


Se a transação falhar por qualquer motivo, o código para na mesma linha em que ocorreu o erro end então a execução salta diretamente para o bloco catch. Portanto, é suficiente a maneira como você escreveu no Bloco de Código 2.

Observe que você deve sempre relançar a exceção após a reversão. Caso contrário, você nunca terá uma idéia do que era um problema. Então deve ser
try{
    $stmt = $db->prepare(... 1 ...);
    $stmt->execute();

    $stmt = $db->prepare(... 2 ...);
    $stmt->execute();

    $stmt = $db->prepare(... 3 ...);
    $stmt->execute();

    $db->commit();

    return true;
}catch(Exception $e){
    $db->rollBack();
    throw $e;
}