jakimo72 wrote:Du solltest nocheinmal über das Schließen von Strings Gedanken machen.
Funktionen können nicht innerhalb von doublequote-Strings stehen,
da muss es dann heißen:
"INSERT INTO seat_seats (blockid, row, col, status, ip, userid) VALUES ('".LAST_INSERT_ID()."', '$row', '$col', '0', '', '')";
Aus Informatikersicht interessant ist das Wort gleichzeitig.
Eine echte Gleichzeitigkeit ist bei PHP nicht möglich.
Aber aus der Datensicht heraus ist eine Transaktion atomar, und damit
quasigleichzeitig.
Transaktionen sind aber nicht über Datenbankgrenzen erlaubt, sondern nur innerhalb einer Datenbank (aber mit mehreren Tabellen).
In MySQL musst
SET AUTOCOMMIT=0
gesetzt werden.
Danach führst Du Deine SQL-Anweisungen aus, als erste
Anweisung muss dann
START TRANSACTION;
stehen, und als letzte SQL-Anweiung
COMMIT;
.
Ich muss dich korrigieren:
1.) LAST_INSERT_ID() ist keine PHP-Funktion sondern eine MySQL-Funktion. Also war die Query von h0n1g schon richtig; er/sie hat allerdings ein Apostroph zuviel in der Query gehabt, nämlich genau vor der Funktion LAST_INSERT_ID().
- Code: Select all
INSERT INTO seat_seats (blockid, row, col, status, ip, userid) VALUES (LAST_INSERT_ID(), '$row', '$col', '0', '', '')
2.) In diesem Fall sind Transaktionen nicht notwendig. Die Funktion LAST_INSERT_ID() ist session-basierend, daher kann es nicht zu korrupten Ergebnissen kommen. Außerdem sind atomare Operationen, nicht 100% atomar/sicher, denn wenn der Thread inmitten einer Transaktion abstürzt od. gekillt wird, dann werden die Operationen nie erfolgreich bis zum Ende ausgeführt. Soweit ich weiß werden Transaktionen erst ab der MySQL-Version 3.23 und nur bei InnoDB und BDB Tabellen unterstützt. Support für Transaktionen in MyISAM Tables gibt es erst ab MySQL 5+.