Maison > base de données > tutoriel mysql > Comment récupérer l'ID à incrémentation automatique après une insertion MySQL en PHP sans conditions de concurrence ?

Comment récupérer l'ID à incrémentation automatique après une insertion MySQL en PHP sans conditions de concurrence ?

Barbara Streisand
Libérer: 2024-12-27 08:50:18
original
956 Les gens l'ont consulté

How to Retrieve the Auto-Incrementing ID After a MySQL Insert in PHP Without Race Conditions?

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);
Copier après la connexion

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())");
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal