• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage zu mysqli::multi_query

thuemmy

Aktives Mitglied
Im PHP: mysqli::multi_query - Manual steht, dass der Rückgabewert FALSE erhält, wenn das erste Statement fehlschlägt. Das habe ich auch soweit verstanden :D Nun aber zur Frage, die ich habe. Wenn ich 2 SQL-Queries ausführen möchte, die in Abhängigkeit zueinander stehen, z.B. INSERT in eine Positionstabelle und UPDATE in einer Kopftabelle, was passiert dann wenn das multi_query beim UPDATE fehlschlägt. Wird das INSERT in der Positionstabelle verworfen?

Gruß thuemmy
 
Das hängt vermutlich davon ab, ob du Transaktionen nutzt. Dort kannst du im Fehlerfall ein Rollback veranlassen. Wahrscheinlich ist multi_query von sich aus ohne Transaktionen auch überhaupt nicht atomar. Das heißt, es ist nicht garantiert, dass alle Queries direkt nacheinander ausgeführt werden.

- PHP: mysqli::autocommit - Manual
 
Hallo mermshaus,

vielen Dank für Dein Post und den Link. Habe ich das nun richtig verstanden, dass ich in dem von mir oben beschriebenen Beispiel zuerst das autocommit (jedes INSERST, UPDATE usw. wird direkt festgeschrieben) ausschalten muss, um dann im Erfolgsfall ein COMMIT, bzw. im Fehlerfall ein ROLLBACK durchzuführen?

Gruß thuemmy
 
So würde ich das machen, ja. Die Beispiele auf den entsprechenden Seiten der Doku sind leider alle nicht besonders toll, aber was du schreibst, klingt gut.

Ach ja, es unterstützen nicht alle Storage-Engines Transaktionen. MyISAM unterstützt sie nicht, InnoDB schon.
 
Hallo mermshaus,

also so früh hättest Du ja nun wirklich nicht aufstehen müssen um mir zu antworten.

Dass nicht alle Storage-Engines Transaktionen unterstützen habe ich gelesen, trotzdem nochmal danke für den Hinweis.

Gruß thuemmy
 
Zurück
Oben