Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erfolg oder Misserfolg von PDO::commit()

Der Schlüsselteil besteht darin, PDO in den Ausnahmemodus zu versetzen während Try-Catch nur zum Ausführen eines Rollbacks unnötig ist. Somit ist Ihr Code in Ordnung, Sie müssen ihn nicht ändern, wenn Sie nur ein Rollback bei einem Fehler wünschen, solange Sie diese Zeile irgendwo haben:

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

Im Falle eines Fehlers wird das Skript beendet, die Verbindung geschlossen und mysql wird die Transaktion gerne für Sie rückgängig machen.

Falls Sie immer noch ein manuelles Rollback durchführen möchten, sollten Sie es richtig machen, nicht wie in den anderen Antworten gesagt. Stellen Sie sicher, dass

  • Sie fangen Exception ab , nicht PDOException , da es egal ist, welche bestimmte Ausnahme die Ausführung abgebrochen hat
  • Sie re-werfen eine Ausnahme nach Rollback, um über das Problem benachrichtigt zu werden
  • auch dass eine Tabellen-Engine Transaktionen unterstützt (d.h. für Mysql sollte es InnoDB sein, nicht MyISAM).

Diese Checkliste stammt aus meinem Artikel die Sie in diesem oder vielen anderen Aspekten ebenfalls nützlich finden können.