sql >> Base de Datos >  >> RDS >> Mysql

PHP/MySQL insertar fila y luego obtener 'id'

$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).