Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP/MySQL-Zeile einfügen und dann 'id' abrufen

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

Siehe mysqli_insert_id() .

Was auch immer Sie tun, fügen Sie nicht ein und führen Sie dann ein "SELECT MAX(id) FROM mytable aus ". Wie Sie sagen, es ist eine Race-Condition und es besteht keine Notwendigkeit. mysqli_insert_id() verfügt bereits über diese Funktionalität.

Eine andere Möglichkeit wäre, beide Abfragen auf einmal auszuführen und MySQL zu verwenden 's LAST_INSERT_ID() -Methode, bei der beide Tabellen gleichzeitig geändert werden (und PHP keine ID benötigt), wie:

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

Hinweis dass jede Verbindung die ID separat verfolgt (so werden Konflikte bereits verhindert).