mysqli_rollback
kann fehlschlagen, wenn Sie nicht (nie) mit der Datenbank verbunden waren. Hängt von der Fehlerbehandlung ab, die Sie vorhand haben.
Ich benutze die mysqli-Bibliothek von PHP. Datenbankeinfügungen und -updates befinden sich immer in einem try-catch-Block. Der Erfolg jeder Abfrage wird sofort überprüft ( if $result === false
), und jeder Fehler löst eine Ausnahme aus. Der Catch ruft mysqli_rollback()
auf und wird mit einer Nachricht für den Benutzer beendet.
Meine Frage ist, sollte ich den Rückgabewert von mysqli_rollback()
überprüfen? Wenn ja, und Rollback fehlschlägt, welche Aktionen sollte der Code ausführen?
Es fällt mir schwer zu verstehen, wie ein Rollback fehlschlagen könnte (abgesehen von einem schrecklichen Bug in MySQL). Und da PHP sowieso beendet wird, scheint ein Rollback fast überflüssig zu sein. Ich denke, dass es im Code für Klarheit sein sollte, aber wenn PHP beendet wird, schließt es die Verbindung zu MySQL und nicht festgeschriebene Transaktionen werden automatisch zurückgesetzt.
Wenn der Rollback fehlschlägt (z. B. Verbindungsfehler), werden die Änderungen nach dem Schließen der Verbindung zurückgesetzt, sodass Sie den Fehler nicht behandeln müssen. Wenn Sie sich in der Transaktion befinden, wird die Transaktion rückgängig gemacht, es sei denn, Sie haben eine explizite Festschreibung (oder Sie arbeiten im Autocommit-Modus, was bedeutet, dass Sie nach jeder Anweisung festgeschrieben haben).
Wenn eine Sitzung, für die Autocommit deaktiviert ist, ohne explizite Beendigung endet die letzte Transaktion festschreibend, setzt MySQL diese Transaktion zurück.
Der einzige Fall, in dem Sie Rollback-Fehler behandeln möchten, ist, wenn Sie das Skript nicht verlassen, sondern eine neue Transaktion später starten, da das Starten der Transaktion implizit die aktuelle Transaktion festschreibt. Sehen Sie sich Anweisungen an, die zu einer impliziten Übergabe führen
mysqli_rollback
kann fehlschlagen, wenn Sie nicht (nie) mit der Datenbank verbunden waren. Hängt von der Fehlerbehandlung ab, die Sie vorhand haben.
Ich benutze die mysqli-Bibliothek von PHP. Datenbankeinfügungen und -updates befinden sich immer in einem try-catch-Block. Der Erfolg jeder Abfrage wird sofort überprüft ( %code% ), und jeder Fehler löst eine Ausnahme aus. Der Catch ruft %code% auf und wird mit einer Nachricht für den Benutzer beendet.
Meine Frage ist, sollte ich den Rückgabewert von %code% überprüfen? Wenn ja, und Rollback fehlschlägt, welche Aktionen sollte der Code ausführen?
Es fällt mir schwer zu verstehen, wie ein Rollback fehlschlagen könnte (abgesehen von einem schrecklichen Bug in MySQL). Und da PHP sowieso beendet wird, scheint ein Rollback fast überflüssig zu sein. Ich denke, dass es im Code für Klarheit sein sollte, aber wenn PHP beendet wird, schließt es die Verbindung zu MySQL und nicht festgeschriebene Transaktionen werden automatisch zurückgesetzt.
Wenn der Rollback fehlschlägt (z. B. Verbindungsfehler), werden die Änderungen nach dem Schließen der Verbindung zurückgesetzt, sodass Sie den Fehler nicht behandeln müssen. Wenn Sie sich in der Transaktion befinden, wird die Transaktion rückgängig gemacht, es sei denn, Sie haben eine explizite Festschreibung (oder Sie arbeiten im Autocommit-Modus, was bedeutet, dass Sie nach jeder Anweisung festgeschrieben haben).
Wenn eine Sitzung, für die Autocommit deaktiviert ist, ohne explizite Beendigung endet die letzte Transaktion festschreibend, setzt MySQL diese Transaktion zurück.
Der einzige Fall, in dem Sie Rollback-Fehler behandeln möchten, ist, wenn Sie das Skript nicht verlassen, sondern eine neue Transaktion später starten, da das Starten der Transaktion implizit die aktuelle Transaktion festschreibt. Sehen Sie sich Anweisungen an, die zu einer impliziten Übergabe führen
Tags und Links php mysql innodb transactions