$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);
Ver mysqli_insert_id()
.
Haga lo que haga, no inserte y luego haga "SELECT MAX(id) FROM mytable
". Como dices, es una condición de carrera y no hay necesidad. mysqli_insert_id()
ya tiene esta funcionalidad.
Otra forma sería ejecutar ambas consultas a la vez y usar MySQL
LAST_INSERT_ID()
método, donde ambas tablas se modifican a la vez (y PHP no necesita ningún ID), como:
mysqli_query($link, "INSERT INTO my_user_table ...;
INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
Nota que cada conexión realiza un seguimiento de la identificación por separado (por lo tanto, los conflictos ya se evitan).