Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP/MySQL insère une ligne puis récupère '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);

Voir mysqli_insert_id() .

Quoi que vous fassiez, n'insérez pas puis faites un "SELECT MAX(id) FROM mytable ". Comme vous le dites, c'est une condition de concurrence et il n'y a pas besoin. mysqli_insert_id() possède déjà cette fonctionnalité.

Une autre façon serait d'exécuter les deux requêtes en une seule fois et d'utiliser MySQL est LAST_INSERT_ID() méthode, où les deux tables sont modifiées en même temps (et PHP n'a pas besoin d'ID), comme :

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

Remarque que chaque connexion garde une trace de l'ID séparément (ainsi, les conflits sont déjà évités).