Heim >Datenbank >MySQL-Tutorial >Wie rufe ich die automatisch inkrementierende ID nach einer MySQL-Einfügung in PHP ohne Race Conditions ab?
Abrufen des Felds „id“ nach dem Einfügen einer Zeile in PHP/MySQL ohne Race Conditions
Beim Einfügen einer Zeile in eine MySQL-Tabelle mit Da es sich um ein automatisch inkrementierendes „id“-Feld handelt, ist es oft wünschenswert, diesen „id“-Wert abzurufen, um ihn in nachfolgenden Vorgängen zu verwenden. Das einfache Einfügen der Zeile und das anschließende Abfragen der Datenbank nach der „ID“ kann jedoch zu Race Conditions führen, wenn in der Zwischenzeit eine weitere Zeile eingefügt wird.
Eine zuverlässige Methode, um die Integrität des „ID“-Abrufs sicherzustellen, ist um die Funktion mysqli_insert_id() zu verwenden. Diese Funktion gibt die ID zurück, die von der letzten INSERT-Anweisung generiert wurde, die für die aktuelle Verbindung ausgeführt wurde.
So implementieren Sie sie:
$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);
Ein anderer, aber weniger empfehlenswerter Ansatz besteht darin, beide einzufügen Zeile in die Primärtabelle und eine entsprechende Zeile in eine zweite Tabelle, die in einer einzelnen atomaren Transaktion mit LAST_INSERT_ID() auf die „ID“ der Primärtabelle verweist. Methode.
mysqli_query($link, "INSERT INTO my_user_table ...; INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
Beachten Sie, dass jede MySQL-Verbindung den „id“-Wert separat verfolgt, um zu verhindern, dass Konflikte bei gleichzeitigen Einfügungen auftreten.
Das obige ist der detaillierte Inhalt vonWie rufe ich die automatisch inkrementierende ID nach einer MySQL-Einfügung in PHP ohne Race Conditions ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!