Obtention du champ 'id' après l'insertion d'une ligne dans PHP/MySQL sans conditions de concurrence
Lors de l'insertion d'une ligne dans une table MySQL avec un champ « id » auto-incrémenté, il est souvent souhaitable de récupérer cette valeur « id » pour l’utiliser dans les opérations ultérieures. Cependant, le simple fait d'insérer la ligne puis d'interroger la base de données pour connaître l'identifiant peut entraîner des conditions de concurrence si une autre ligne est insérée entre-temps.
Une méthode fiable pour garantir l'intégrité de la récupération de l'identifiant est pour utiliser la fonction mysqli_insert_id(). Cette fonction renvoie l'ID généré par la dernière instruction INSERT effectuée sur la connexion actuelle.
Voici comment l'implémenter :
$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);
Une autre approche, mais moins recommandée, consiste à insérer à la fois le ligne dans la table primaire et une ligne correspondante dans une deuxième table qui fait référence à « l'identifiant » de la table primaire dans une seule transaction atomique à l'aide de LAST_INSERT_ID() méthode.
mysqli_query($link, "INSERT INTO my_user_table ...; INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
Notez que chaque connexion MySQL garde une trace de la valeur « id » séparément, empêchant ainsi les conflits de se produire avec des insertions simultanées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!