j4nk3y: MySQLi transaction/commit/rollback

Beitrag lesen

Einen wunderschönen zusammen,

Nach langer Zeit der Projektplanung soll es bei mir (eigentlich wieder^^) in die heiße Phase gehen.

Doch ein Problem, wenn man es so sehen möchte, bedarf noch einer Lösung / Erklärung. Da ich, wenn ich den hoffentlich mal fertig werden sollte, von wenigen bis vielen... bis hoffentlich sehr vielen Datenbankzugriffen pro, sagen wir mal, Minuten ausgehe. Bin ich, während meiner vorbereitung, auch über das konstrukt der transaction sowie commit und rollback gestoßen.

Durch

$mysqli->begin_transaction();

werden alle folgenden Datenbankzugriffe zu einer "aktion" zusammengefasst und weitere bzw andere Datenbankzugriffe werden aufgeschoben bis die "aktion" abgeschloßen ist. Bzw die Datenbankverbindung mit

$mysqli->close();

beendet wird.

Sehe ich das richtig? Z.B. auch wenn a.php , b.php aufruft und dort ein

$mysqli->query();

ausgeführt wird und die Datenbankverbindung erst in b.php geschloßen wird?

Bisher ist mir auch noch nicht ganz klar was die Funktionen

$mysqli->commit();
$mysqli->rollback();

veranstalten. Wenn dort jmd eine einfach erklärung hätte, wär ich sehr dankbar.

Zu meiner Sorge:

Sagen wir ich rufe a.php auf und dieses soll meine Datenbank füllen. Je nachdem was ich eingebe "x", läuft eine Schleife "x"-mal durch, welche meine Daten in der Datenbank setzt nach dem Schema:

Daten erzeugen -> DB verbindung aufbauen -> Daten eintragen -> DB verbindung schließen

Dies kann von einigen Sekunden bis mehrere Stunden dauern.

Nun greift ein (mehrere) Benutzer auf meine Webseite zu und fragt Daten ab. Vielleicht wichtig : Nicht aus den Tabellen an den a.php "arbeitet".

Inwieweit können dann probleme auftreten in der abwicklung von a.php und einem script c.php welches vom Benutzer aufgerufen wird.

Ich würde es mir so vorstellen, dass a.php seine Daten erzeugt und falls, während dessen c.php vom Benutzer aufgerufen wird diese Datenbankabfrage durchgeführt wird und wenn diese beendet wurde, a.php solange mit seinem Datenbankzugriff warten muss bis c.php fertig ist.

Ist das korrekt? Wartet a.php bzw c.php auf das fertig werden des jeweils anderen? Oder könnte dort irgendwas übersprungen werden. Und inwieweit sind parallele Ausführungen von Scripten möglich?

Vielen Dank für eure Hilfe!

Mit freundlichem Gruß

Jo