Nieuw lid |
|
Neem een tabel met de kolommen `id` en `data`.
De `id` kolom is AUTOINCREMENT.
In een webpagina waar de bezoeker iets kan posten, voeg ik een record toe:
mysql_query( "INSERT INTO tabel (data) VALUES('$fnord');" );
mysql_query( "INSERT INTO tabel (data) VALUES('$fnord');" );
En dan wil ik de `id` weten, van het zojuist toegevoegde record...
Is dit veilig, wanneer meerdere bezoekers tegelijk kunnen posten? Dus wanneer het script door meerdere threads tegelijkertijd wordt uitgevoerd?
(Het is denkbaar dat thread A de INSERT-query uitvoert, vervolgens thread B de INSERT-query uitvoert, en vervolgens thread A de id van thread B krijgt.)
De documentatie zegt:
For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client.
Betekent dit, dat deze methode alleen veilig is als we geen persistente connecties gebruiken?
Dus dat het met:veilig is,
en dat het met:pas veilig is als we een LOCK gebruiken?
(Ik gebruik een persistente connectie voor mijn website, want het lijkt me zo dat bij een website, het gebruik van een persistente connectie, een betere performance oplevert dan dat er voor elke pageview opnieuw een connectie wordt gemaakt.)
|