Hallo Leute.
Ich bin hier grad am verzweifeln.
Ich hab hier ein Skript, welches mir mehrere Einträge aus einer Datenbank löschen soll.
Da die zu löschenden Teile zusammengehören und ich sicherstellen will, daß die Teile auch alle gelöscht werden, mach ich ne Transaktion um die SQL-Queries.
Im Code sieht das etwa wie folgt aus:
Das scheint im Prinzip auch gut zu klappen, die errorvariable wird nicht gesetzt. Allerdings tritt bei Ausführen von commit ein Fehler auf, denn ich bekomme immer "No commit" zur Antwort.
Ist hier vielleicht die Menge der DELETE-Anweisungen ausschlaggebend? Diese können schonmal ein paar hundert erreichen.
Hab ich vielleicht ein Problem mit dem Errorhandling, daß er mir trotz error nicht in den Rollback Zweig geht?
Wär schön, wenn mir einer von euch weiterhelfen könnte.
LG,
MSJones
PS: Wenn ich mir sämtliche SQL-Anweisungen ausgeben lasse und diese in eine TXT-Datei kopiere und entsprechen noch BEGIN; davor und COMMIT; dahinterschreibe, funktioniert es, wenn ich die Datei direkt ins SQLite importiere.
Ich bin hier grad am verzweifeln.
Ich hab hier ein Skript, welches mir mehrere Einträge aus einer Datenbank löschen soll.
Da die zu löschenden Teile zusammengehören und ich sicherstellen will, daß die Teile auch alle gelöscht werden, mach ich ne Transaktion um die SQL-Queries.
Im Code sieht das etwa wie folgt aus:
Code:
$db = new PDO("sqlite:database.db"); if ($db->beginTransaction()) echo "Begin"; else echo "No Begin"; $error = false; $SQL = "SELECT * FROM Table;"; $result = $db->query($SQL); while ($row=$result->fetch(PDO::FETCH_BOTH)) { $SQL2 = "DELETE FROM TABLE WHERE spalte = ".$row[0].";"; $result2 = $db->query($SQL2); if (($error = $db->errorCode) != "00000") { echo "Fehler<br>"; $error = true; } } if ($error) { $db->rollback(); echo "rollback"; } else { if ($db->commit()) echo"commit"; else echo "No commit"; }
Ist hier vielleicht die Menge der DELETE-Anweisungen ausschlaggebend? Diese können schonmal ein paar hundert erreichen.
Hab ich vielleicht ein Problem mit dem Errorhandling, daß er mir trotz error nicht in den Rollback Zweig geht?
Wär schön, wenn mir einer von euch weiterhelfen könnte.
LG,
MSJones
PS: Wenn ich mir sämtliche SQL-Anweisungen ausgeben lasse und diese in eine TXT-Datei kopiere und entsprechen noch BEGIN; davor und COMMIT; dahinterschreibe, funktioniert es, wenn ich die Datei direkt ins SQLite importiere.
Kommentar