Sie sind hier : sebastian1012.bplaced.net/ homepage-neu / kreuz-und-quer / tutorials-info-neuigkeiten-php / auslesen-der-zuletzt-eingefuegten-id-auto-increment.php

Auslesen der zuletzt eingefügten ID (auto increment)

Recht häufig benötigt man nach einer INSERT-Operation auf eine Tabelle mit einer automatisch inkrementierten ID als Primärschlüssel den durch diese Operation erzeugten Auto-Increment-Wert. Beispielsweise dafür, um anschließend weitere Operationen mit diesem Datensatz vorzunehmen oder die ID in anderen Tabellen als Fremdschlüssel zu verwenden. Zwei unterschiedliche Wege diese ID herauszufinden sollen in diesem Beitrag verglichen werden.

Denis hat vor einiger Zeit in den Themenvorschlägen vorgeschlagen, dieses Thema einmal näher zu untersuchen und dabei folgende zwei Wege vorgeschlagen.

1. Per SQL-Abfrage
Hierbei wird nach der INSERT-Query noch eine weitere Query an MySQL abgesendet, die einen Datensatz zurückgibt, der allein die ID enthält:

mysql_query("INSERT INTO tabelle (spalte1,spalte2,...) VALUES ('wert1','wert2',...)"); $rs = mysql_query("SELECT LAST_INSERT_ID()"); $id = mysql_result($rs,0);

2. Per PHP
Eine andere Möglichkeit ist die Abfrage durch PHP erledigen zu lassen. Dies geschieht über den Befehl mysql_insert_id().

mysql_query("INSERT INTO tabelle (spalte1,spalte2,...) VALUES ('wert1','wert2',...)"); $id = mysql_insert_id();

Grundsätzlich erzeugen beide Varianten also gleiche Lösungen. Es fällt aber auf, dass man im Fall 1 zusätzlich noch das Result Set auslesen muss, um an den Wert zu gelangen.
Die Ergebnisse sehen aber folgendermaßen aus:

Datei Gesamtlaufzeit durchschnittliche Laufzeit pro Durchlauf Verhältnis zur schnellsten Variante
result_mysql_insert_id.php 6.168871 s 6.169 ms 100 %
result_last_insert_id.php 6.178885 s 6.179 ms 100 %

Es ist zu erkennen, dass beide Varianten gleich schnell sind. Hinsichtlich der Performance gibt es also keine Unterschiede.
Die Gründe kann ich nicht 100%ig verifizieren, jedoch könnte ich mir vorstellen, dass mysql_insert_id() intern exakt die gleiche SQL-Abfrage ausführt und letzten Endes bei beiden Wegen exakt dasselbe getan wird.
Ich werde weiterhin mysql_insert_id() bevorzugen, weil man dafür einfach eine Zeile weniger benötigt, aber das sei jedem selbst überlassen. Wer nach Lines of Code bezahlt wird, sollte natürlich LAST_INSERT_ID() abfragen 😉

Die verwendeten Scripte und die Ergebnisse gibts natürlich zum Download.

Das war also mal ein Beitrag, der euch nicht dazu bringen wird, gleich alle Scripte zu überarbeiten. Ich hoffe aber trotzdem, dass er informativ ist und ihr euch zukünftig nicht mehr den Kopf zerbrechen müsst. 😉