$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
$id = mysqli_insert_id($link);
Zobacz mysqli_insert_id()
.
Cokolwiek robisz, nie wstawiaj, a następnie rób "SELECT MAX(id) FROM mytable
". Jak mówisz, jest to wyścig i nie ma potrzeby. mysqli_insert_id()
ma już tę funkcję.
Innym sposobem byłoby uruchomienie obu zapytań za jednym razem i użycie MySQL
LAST_INSERT_ID()
metoda, w której obie tabele są modyfikowane na raz (a PHP nie wymaga żadnego identyfikatora), np.:
mysqli_query($link, "INSERT INTO my_user_table ...;
INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
Uwaga że każde połączenie śledzi oddzielnie identyfikator (więc konflikty są już zapobiegane).