Hallo,
ich steuere meine Datenbank mit einem ODBC-Treiber an. Hier wird es möglich, dass autocommit-Verhalten für Querys mittels odbc-Funktionen auszuschalten. Das bedeutet, man kann eine gestartete Transaktion mit Hilfe von odbc_rollback(); oder odbc_commit(); steuern. Tritt ein Fehler bei einem INSERT oder einem DELETE auf, macht man einen rollback und die Datenbank ist wieder im Ausgangszustand.
In meiner Datenbankklasse möchte ich nun einen spezielle Fehlerbehandlung für diesen Umstand entwickeln. Angenommen alle (meinetwegen 5) Querys einer Transaktion wurden ausgeführt bis auf den letzten, es tritt ein Fehler auf und ich versuche einen rollback:
Meine Fragen dazu:
Wie verhält sich die Datenbank jetzt? Es wurden Daten geändert, aber es hat weder ein rollback noch ein commit stattgefunden. Die Daten sind zwar in der Datenbank, aber wozu brauche ich die commit-Funktion dann eigentlich, wenn sowieso alles bereits in der Datenbank steht?
Gleiche Vorraussetzungen, alle Querys haben geklappt. Die Datenbank ist also korrekt. Jetzt muss nur noch der commit folgen.
Was ist, wenn der commit fehlschlägt? Die Datenbank hält die Daten trotzdem.
Werden die erst nach einiger Zeit gelöscht? oder nach Beenden der Verbindung?
ich steuere meine Datenbank mit einem ODBC-Treiber an. Hier wird es möglich, dass autocommit-Verhalten für Querys mittels odbc-Funktionen auszuschalten. Das bedeutet, man kann eine gestartete Transaktion mit Hilfe von odbc_rollback(); oder odbc_commit(); steuern. Tritt ein Fehler bei einem INSERT oder einem DELETE auf, macht man einen rollback und die Datenbank ist wieder im Ausgangszustand.
In meiner Datenbankklasse möchte ich nun einen spezielle Fehlerbehandlung für diesen Umstand entwickeln. Angenommen alle (meinetwegen 5) Querys einer Transaktion wurden ausgeführt bis auf den letzten, es tritt ein Fehler auf und ich versuche einen rollback:
PHP-Code:
<?php
if(!@odbc_rollback($this->connect_id))
echo "Fehler beim Zurücksetzen der Datenbank, die Datenbank ist möglicherweise unbrauchbar";
?>
Wie verhält sich die Datenbank jetzt? Es wurden Daten geändert, aber es hat weder ein rollback noch ein commit stattgefunden. Die Daten sind zwar in der Datenbank, aber wozu brauche ich die commit-Funktion dann eigentlich, wenn sowieso alles bereits in der Datenbank steht?
Gleiche Vorraussetzungen, alle Querys haben geklappt. Die Datenbank ist also korrekt. Jetzt muss nur noch der commit folgen.
Was ist, wenn der commit fehlschlägt? Die Datenbank hält die Daten trotzdem.
Werden die erst nach einiger Zeit gelöscht? oder nach Beenden der Verbindung?