Ich würde die verschiedenen Inserts auf jeden Fall in eine Transaktion packen, denn nach dem ersten Insert und vor den nachfolgenden ist die Datenbank in einem inkonsistenten Zustand. Man muss bei einer Datenbank immer damit rechnen, dass ein anderer Prozess gerade diese Daten lesen möchte.
Ich wusste bisher auch nicht, wie das in MySQL funktioniert, weil ich die Funktion LAST_INSERT_ID() nicht kannte. Auf Stackoverflow habe ich allerdings dieses Snippet gefunden:
Code:
BEGIN;
INSERT INTO users (username, password)
VALUES('test', 'test');
INSERT INTO profiles (userid, bio, homepage)
VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;
BEGIN und COMMIT begrenzen die Transaktion und zwischendrin kannst du deine Inserts machen. Während der Transaktion kann kein anderer Nutzer der Datenbank auf die noch inkonststenten Daten zugreifen.
//edit: Du könntest vermutlich auch zuerst in einem Query die Transaktion beginnen und einen Insert ausführen, dir in PHP die insert_id merken und später die anderen Queries per PHP-Befehl absetzen. Denke nur an das COMMIT; am Ende