Da quello che ricordo, LAST_INSERT_ID() dovrebbe restituire l'ultimo autoincrement creato all'interno della stessa sessione/connessione SQL.
Questo significa che degli utenti concorrenti non dovrebbero modificare l'ID restituito in un'altra sessione.
Per verificare la cosa puoi provare due script come i seguenti:
Codice PHP:
<?php
// test_a.php
$link = mysql_connect('localhost', 'root', '');
mysql_select_db('test');
mysql_query("INSERT INTO test (test) VALUES ('test')");
sleep(10); // favorisci la concorrenza
printf("Last inserted record has id %d\n", mysql_insert_id());
?>
Codice PHP:
<?php
// test_b.php
$link = mysql_connect('localhost', 'root', '');
mysql_select_db('test');
mysql_query("INSERT INTO test (test) VALUES ('test')");
mysql_query("INSERT INTO test (test) VALUES ('test')");
mysql_query("INSERT INTO test (test) VALUES ('test')");
mysql_query("INSERT INTO test (test) VALUES ('test')");
mysql_query("INSERT INTO test (test) VALUES ('test')");
mysql_query("INSERT INTO test (test) VALUES ('test')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?>
Richiamando test_a.php ed, immediatamente dopo, test_b.php dovresti scoprire che test_a.php restituisce l'ID generato dal suo INSERT e non dall'ultima query di test_b.php