Hier ist sie also ...
// Ich starte die Transaktion $mysqli = new mysqli(...);
// Start der Transaktion $mysqli->autocommit(FALSE);
- Hier ist ein select prepared stmt mit eigener Datenbankverbindung
- Hier ist eine vorbereitete Einfügung mit einer eigenen Datenbankverbindung
- Hier ist eine vorbereitete Select-Stmt mit der oben genannten Datenbank-Verbindung
- neue Verbindung einfügen
- neue Verbindung einfügen
- neue Verbindung einfügen
wenn jede vorbereitete Abfrage true zurückgibt, wird ($mysqli->commit()) sonst $mysqli->rollback
Ich weiß nicht, aus welchem Grund diese Transaktion automatisch übertragen wird.
Ich habe einige Transaktion mit 3 mehrere Verbindungen getan und sie rolledback... diese nicht... Ist mysql dafür gemacht, eine Transaktion zu unterstützen, die Abfragen mit einzelnen Verbindungen hat?
Gelöst... wenn Abfragen aus verschiedenen Tabellen voneinander abhängig sind, wie in meinem Fall und Sie starke Datenzugriffssicherheit benötigen, setzen Sie autocommit auf false für jede Verbindung, die Sie öffnen, setzen Sie eine var auf false für jede fehlgeschlagene bussness-Logik, wenn etwas fehlschlägt, rollback jeden Satz von Abfragen, sonst comit evry Abfrage... Ja, die Transaktion wird pro Verbindung ausgeführt, hatte etwas anderes, das den Rollback verwaltete, als ich sagte, dass mysql den Rollback für einige Transaktionen mit mehreren Verbindungen durchführte
Re-edit : natürlich wird dies nicht wie eine normale Transaktion funktionieren ... im Falle eines Systemabsturzes werden die Daten bis zum Zeitpunkt des Absturzes gespeichert