Mysql
 sql >> Database >  >> RDS >> Mysql

Transazioni PHP, MySQL, PDO - Il codice all'interno del blocco try si ferma a commit()?

Se la transazione non riesce per qualsiasi motivo, il codice si ferma alla riga in cui si è verificato l'errore fine, l'esecuzione salta direttamente al blocco catch. Quindi è sufficiente il modo in cui l'hai scritto in Code Block 2.

Tieni presente che dovresti rilanciare sempre di nuovo l'eccezione dopo il rollback. Altrimenti non avrai mai idea di quale fosse il problema. Così dovrebbe essere

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;
}