sql >> Base de Datos >  >> RDS >> Mysql

Transacciones de PHP, MySQL, PDO:¿el código dentro del bloque de prueba se detiene en commit ()?

Si la transacción falla por cualquier motivo, el código se detiene en la misma línea donde ocurrió el error end entonces la ejecución salta directamente al bloque catch. Por lo tanto, es suficiente con la forma en que lo tiene escrito en el Bloque de código 2.

Tenga en cuenta que siempre debe volver a lanzar la excepción después de la reversión. De lo contrario, nunca tendrá una idea de cuál fue el problema. Así debería 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;
}