$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);
Zie mysqli_insert_id()
.
Wat je ook doet, voeg geen "SELECT MAX(id) FROM mytable
in en voer dan een "SELECT MAX(id) FROM mytable
". Zoals je zegt, het is een raceconditie en dat is niet nodig. mysqli_insert_id()
heeft deze functionaliteit al.
Een andere manier is om beide query's in één keer uit te voeren en MySQL
te gebruiken 's LAST_INSERT_ID()
methode, waarbij beide tabellen tegelijk worden gewijzigd (en PHP heeft geen ID nodig), zoals:
mysqli_query($link, "INSERT INTO my_user_table ...;
INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
Opmerking dat Elke verbinding de ID apart bijhoudt (conflicten worden dus al voorkomen).