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

PDO::commit() successo o fallimento

La parte fondamentale è impostare PDO in modalità eccezione mentre non è necessario try-catch solo per eseguire un rollback. Quindi, il tuo codice va bene, non c'è bisogno di cambiarlo se tutto ciò che vuoi è il rollback in caso di errore, purché tu abbia questa riga da qualche parte:

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 

In caso di errore lo script verrà terminato, la connessione verrà chiusa e mysql sarà lieto di eseguire il rollback della transazione per te.

Nel caso in cui desideri ancora eseguire il rollback manualmente, dovresti farlo correttamente, non come si dice nelle altre risposte. Assicurati che

  • stai riscontrando Exception , non PDOException , poiché non importa quale particolare eccezione abbia interrotto l'esecuzione
  • stai rilanciando un'eccezione dopo il rollback, per essere avvisato del problema
  • anche che un motore di tabelle supporta le transazioni (cioè per Mysql dovrebbe essere InnoDB, non MyISAM).

Questa checklist è tratta da il mio articolo che potresti trovare utile in questo o anche in molti altri aspetti.