Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP/MySQL insira a linha e obtenha '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);

Consulte mysqli_insert_id() .

Faça o que fizer, não insira e depois faça um "SELECT MAX(id) FROM mytable ". Como você disse, é uma condição de corrida e não há necessidade. mysqli_insert_id() já tem essa funcionalidade.

Outra maneira seria executar as duas consultas de uma só vez e usar o MySQL LAST_INSERT_ID() de método, onde ambas as tabelas são modificadas de uma só vez (e o PHP não precisa de nenhum ID), como:
mysqli_query($link, "INSERT INTO my_user_table ...;
  INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");

Observação que Cada conexão mantém o controle de ID separadamente (portanto, os conflitos já são evitados).