1113 Stimmen

MySQL/PHP: ID vom letzten INSERT auslesen

Info von Stefan Trost | Letztes Update am 23.11.2023 | Erstellt am 13.12.2012

Wenn wir mit INSERT einen neuen Datensatz in eine MySQL-Tabelle einfügen und diese eine AUTO_INCREMENT Spalte enthält, bekommt dieser neue Datensatz automatisch eine neue eindeutige ID zugewiesen, ohne dass wir zunächst wissen, wie diese ID lautet (wenn wir nicht explizit eine ID angegeben haben). Manchmal benötigen wir allerdings im weiteren Skript-Verlauf genau diese ID. In dieser Info möchte ich euch daher zeigen, wie ihr diese ID ermitteln könnt.

Wir schauen uns dazu zwei unterschiedliche Ansätze an - in unserem ersten Beispiel nutzen wir zum Auslesen der ID die PHP-Funktion mysqli_insert_id(), danach schauen wir uns in unserem zweiten Beispiel eine alternative Möglichkeit an, die ausschließlich mit MySQL arbeitet.

Erster Weg: mysqli_insert_id

PHP stellt uns die Funktion mysqli_insert_id() zur Verfügung, die für uns genau diese Aufgabe erledigt. Hier ist ein kleines Beispiel:

mysqli_query($db, "INSERT INTO tab (vname) VALUES ('Anne')");
$id = mysqli_insert_id($db);
mysqli_query($db, "UPDATE tab SET vname = 'Anna' WHERE id = $id");

Wir fügen in diesem Beispiel zunächst eine neue Zeile in die Tabelle "tab" ein und ermitteln anschließend mit mysqli_insert_id() die bei diesem Vorgang erstellte ID. Danach verwenden wir diese ID, um eine Änderung an dem zuvor gespeicherten Datensatz vorzunehmen.

Wichtig: mysqli_insert_id() bezieht sich immer auf die letzte durchgeführte Query. Daher sollte man die ID - falls benötigt - immer unmittelbar nach der INSERT-Query abfragen, da sonst nicht mehr auf sie zugegriffen werden kann. Hat die letzte Anweisung keine AUTO_INCREMENT ID erzeugt, liefert mysqli_insert_id() den Wert 0 zurück. Falls eine INSERT-Anweisung mehrere IDs erzeugt hat, wird der erste von dieser Anweisung erfolgreich eingefügte Wert zurück gegeben.

Zweiter Weg: LAST_INSERT_ID

Eine weitere Möglichkeit, die ihr auch ohne PHP direkt in MySQL nutzen könnt, möchte ich euch als nächstes vorstellen:

SELECT LAST_INSERT_ID()

LAST_INSERT_ID() gibt uns immer die zuletzt vergebene ID zurück. Im Gegensatz zu mysqli_insert_id() auch dann, wenn zwischenzeitlich andere Querys durchgeführt wurden. Damit lässt sich die ID also auch noch herausfinden, wenn der letzte INSERT-Befehl schon länger zurück liegt.

Mit "SELECT LAST_INSERT_ID()" erhalten wir die letzte ID direkt als Ergebnis unserer Anweisung zurück. Wir können LAST_INSERT_ID() aber auch direkt in anderen MySQL-Anweisungen verwenden, zum Beispiel um die letzte ID in eine Tabelle einzufügen:

INSERT INTO tab (id, pid) VALUES (1, LAST_INSERT_ID());

Oder um auf den eben eingefügten Datensatz in einer anderen Anweisung zugreifen zu können:

INSERT INTO tab (vname) VALUES ('Anne');
UPDATE tab SET vname = 'Anna' WHERE id = LAST_INSERT_ID();

Damit haben wir das PHP-Beispiel aus dem letzten Abschnitt mit reinem MySQL ohne den Umweg über PHP nachgebaut.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.