Mysql
 sql >> Database >  >> RDS >> Mysql

Riga di inserimento PHP/MySQL, quindi ottieni '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);

Vedi mysqli_insert_id() .

Qualunque cosa tu faccia, non inserire e quindi eseguire un "SELECT MAX(id) FROM mytable ". Come dici tu, è una race condition e non ce n'è bisogno. mysqli_insert_id() ha già questa funzionalità.

Un altro modo sarebbe eseguire entrambe le query in una volta sola e utilizzare MySQL LAST_INSERT_ID() metodo, in cui entrambe le tabelle vengono modificate contemporaneamente (e PHP non ha bisogno di alcun ID), come:

mysqli_query($link, "INSERT INTO my_user_table ...;
  INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");

Nota che ogni connessione tiene traccia dell'ID separatamente (quindi, i conflitti sono già prevenuti).