2010-01-04 5 views
5

Ich habe ein Code-Beispiel gesehen, wo jemand einWenn eine PHP-PDO-Transaktion fehlschlägt, muss ich explizit rollback()?

$dbh->rollback(); 

tut, wenn es eine PDOException auftritt. Ich dachte, die Datenbank wird in diesem Fall automatisch zurückgesetzt.

+0

Ich glaube, dass die Transaktion wird einfach auf Datenbankebene anhalten und dann ablaufen, aber es sollte eine gute Übung sein, 'Rollback()' einige DB-Ressourcen zu speichern. –

Antwort

9

Wenn Sie nicht commit nicht rollback eine geöffnete Transaktion, und es ist nicht commited überall später in Ihrem Skript, wird es nicht sein commited (wie von der Datenbank-Engine zu sehen ist) und wird automatisch zurückgerollten an das Ende deines Skripts.


Aber ich (na ja, fast) immer commit oder rollback explizit die Transaktionen Ich öffne, so:

  • Es nicht Risiko eines Fehlers ist (wie commiting "versehentlich" später in das Skript)
  • der Code ist leicht zu lesen/verstehen: wenn man $db->rollback() sieht, er weiß, dass ich die Transaktion zurückgerollten sicher wollen, und er muss nicht denken, "er tat Echt Willst du zurückrollen, oder hat er etwas vergessen? und was ist später im Drehbuch? "


Der DB-Motor nicht‚die PDOException sehen‘: Es wird von PHP unter verschiedenen Bedingungen ausgelöst wird - aber die Datenbank-Rollback nicht alles von selbst:

  • entweder eine Transaktion
  • verpflichtet ist oder es zurückgerollten
  • oder es ist nicht ausdrücklich verpflichtet, noch zurückgerollten - was es nicht verpflichtet bedeutet - was bedeutet, was geändert worden ist, ist nicht „wirklich“ modifizierte
+1

Ja, selbst wenn es automatisch zurückgesetzt wird, wäre es eine sehr schlechte Programmierpraxis, wenn das Rollback nur passieren würde, wenn das Skript beendet ist. Wenn jemand später den Code änderte, konnte es Fehler geben. – MindStalker

Verwandte Themen