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

Wenn eine PHP-PDO-Transaktion fehlschlägt, muss ich dann explizit rollback() ausführen?

Wenn Sie sich nicht commit kein rollback eine geöffnete Transaktion, und sie ist nicht commited Irgendwo später in Ihrem Skript wird es nicht commited (wie von der Datenbank-Engine gesehen) , und wird am Ende Ihres Skripts automatisch zurückgesetzt.


Trotzdem, ich (naja, fast) immer commit oder rollback explizit die Transaktionen, die ich öffne, also :

  • Es besteht kein Risiko eines Fehlers (wie ein "versehentliches" Commit später im Skript)
  • Der Code ist einfacher zu lesen / zu verstehen :wenn man $db->rollback() sieht , er weiß, dass ich die Transaktion auf jeden Fall rückgängig machen möchte, und er muss nicht denken:„wollte er wirklich zurücksetzen, oder hat er etwas vergessen? und was ist später im Skript? "


Die DB-Engine "sieht" die PDOException nicht:Sie wird von PHP unter verschiedenen Bedingungen geworfen -- aber die Datenbank setzt selbst nichts zurück:

  • entweder wird eine Transaktion festgeschrieben
  • oder es wird zurückgesetzt
  • oder es wurde weder explizit festgeschrieben noch rückgängig gemacht – was bedeutet, dass es nicht festgeschrieben wurde – was bedeutet, dass das, was geändert wurde, nicht „wirklich“ geändert wurde