W3docs

Wie man die zuletzt eingefügte ID in PHP und MySQL abruft

Lernen Sie, wie Sie die zuletzt eingefügte ID in PHP und MySQL mit MySQLi und PDO zuverlässig abrufen und typische Fallstricke vermeiden.

Wenn Sie eine Zeile in eine MySQL-Tabelle einfügen, deren Primärschlüssel eine AUTO_INCREMENT-Spalte ist, generiert die Datenbank die neue ID für Sie. PHP bietet eine Möglichkeit, diese ID direkt nach dem Einfügen zurückzulesen, ohne eine zweite SELECT-Abfrage ausführen zu müssen. Diese Seite zeigt, wie das sowohl mit der MySQLi- als auch mit der PDO-Erweiterung funktioniert, warum der Wert zuverlässig ist und worauf Sie achten sollten.

Die zuletzt eingefügte ID wird am häufigsten verwendet, um verknüpfte Datensätze zu verbinden: Einen neuen user einfügen, dessen ID abrufen und dann Zeilen in orders oder profiles einfügen, die darauf als Fremdschlüssel verweisen.

Wie es funktioniert

Beide unten beschriebenen Funktionen geben die ID zurück, die durch das letzte erfolgreiche INSERT auf der aktuellen Datenbankverbindung generiert wurde:

  • mysqli_insert_id($conn) — MySQLi (prozedural oder objektorientiert).
  • PDO::lastInsertId() — PDO.

Zwei wichtige Details:

  • Der Wert ist verbindungsspezifisch. Selbst wenn andere Benutzer gleichzeitig Zeilen einfügen, erhalten Sie immer die ID, die durch Ihre Verbindung generiert wurde — es gibt also keine Race Condition.
  • Es wird nur dann ein Wert ungleich null zurückgegeben, wenn die eingefügte Tabelle eine AUTO_INCREMENT-Spalte besitzt. Hat die Tabelle keinen Auto-Increment-Schlüssel, erhalten Sie 0.

Voraussetzungen

Bevor wir beginnen, sollten einige Voraussetzungen erfüllt sein:

  • Ein Webserver mit installiertem PHP
  • Eine MySQL-Datenbank
  • Zugang zur phpMyAdmin-Oberfläche oder einem ähnlichen Datenbankverwaltungswerkzeug
  • Eine Tabelle mit einem AUTO_INCREMENT-Primärschlüssel. Die folgenden Beispiele setzen diese Tabelle voraus:
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

Weitere Informationen zum Definieren von Tabellen finden Sie unter Create a MySQL Table.

Eine Verbindung herstellen

Der erste Schritt zum Abrufen der zuletzt eingefügten ID besteht darin, eine Verbindung zur Datenbank herzustellen. Mit MySQLi erfolgt dies über die Funktion mysqli_connect(), die folgende Parameter benötigt:

  • Den Namen des Datenbankservers
  • Den Benutzernamen für den Datenbankzugriff
  • Das Passwort des Datenbankbenutzers
  • Den Namen der zu verbindenden Datenbank

Hier ist ein Beispiel, wie eine Verbindung zur Datenbank hergestellt wird:

<?php
$server = "localhost";
$username = "root";
$password = "password";
$database = "database_name";

$conn = mysqli_connect($server, $username, $password, $database);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

Einen tieferen Einblick in die Verbindungsherstellung erhalten Sie unter Connect to a MySQL Database.

Die SQL-Anweisung schreiben

Sobald eine Verbindung zur Datenbank hergestellt wurde, ist der nächste Schritt das Schreiben der SQL-Anweisung, die zum Einfügen der Daten in die Datenbank verwendet wird.

Hier ist ein Beispiel einer SQL-Anweisung, die Daten in eine Datenbanktabelle einfügt:

INSERT INTO table_name (column1, column2, column3)
VALUES ('value1', 'value2', 'value3');

Die SQL-Anweisung ausführen

Sobald die SQL-Anweisung geschrieben wurde, ist der nächste Schritt die Ausführung. Dies erfolgt mit der Funktion mysqli_query(), die folgende Parameter benötigt:

  • Die Verbindung zur Datenbank
  • Die auszuführende SQL-Anweisung

Hier ist ein Beispiel, wie die SQL-Anweisung ausgeführt wird:

<?php
$sql = "INSERT INTO table_name (column1, column2, column3)
VALUES ('value1', 'value2', 'value3')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
?>

Sicherheitshinweis: Verwenden Sie in Produktionsumgebungen immer Prepared Statements, um SQL-Injection-Angriffe zu verhindern.

Die zuletzt eingefügte ID abrufen

Nachdem die Daten in die Datenbank eingefügt wurden, besteht der nächste Schritt darin, die ID des zuletzt eingefügten Datensatzes abzurufen. Dies erfolgt mit der Funktion mysqli_insert_id(), die folgenden Parameter benötigt:

  • Die Verbindung zur Datenbank

Hier ist ein Beispiel, wie die zuletzt eingefügte ID abgerufen wird:

<?php
$last_id = mysqli_insert_id($conn);
echo "Last inserted ID is: " . $last_id;
?>

Die Verbindung schließen

Nachdem die zuletzt eingefügte ID abgerufen wurde, ist es wichtig, die Verbindung zur Datenbank zu schließen, um Sicherheitsrisiken zu vermeiden. Dies erfolgt mit der Funktion mysqli_close(), die folgenden Parameter benötigt:

  • Die Verbindung zur Datenbank

Hier ist ein Beispiel, wie die Verbindung zur Datenbank geschlossen wird:

<?php
mysqli_close($conn);
?>

Vollständiges Beispiel (MySQLi, Prepared Statement)

In echtem Code sollten Sie Benutzerdaten über ein Prepared Statement übergeben, anstatt sie in den SQL-String zu verketten. Das Muster ist identisch: Einfügen ausführen, dann die ID lesen. Hier ist alles zusammengefasst:

<?php
$conn = mysqli_connect("localhost", "root", "password", "database_name");
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);

$name = "Jane Doe";
$email = "[email protected]";
mysqli_stmt_execute($stmt);

$last_id = mysqli_insert_id($conn);
echo "New user inserted with ID: " . $last_id;

mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

Nach dem erfolgreichen Einfügen enthält $last_id den Wert, den MySQL für die Spalte id generiert hat — zum Beispiel 1 beim ersten Einfügen, 2 beim nächsten und so weiter.

Die letzte ID mit PDO abrufen

Wenn Sie sich mit PDO statt mit MySQLi verbinden, verwenden Sie die Methode lastInsertId() am Verbindungsobjekt:

<?php
$pdo = new PDO("mysql:host=localhost;dbname=database_name", "root", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute(["John Doe", "[email protected]"]);

$last_id = $pdo->lastInsertId();
echo "New user inserted with ID: " . $last_id;
?>

Beachten Sie, dass PDO::lastInsertId() die ID als string zurückgibt. Casten Sie sie mit (int), wenn Sie einen numerischen Typ benötigen.

Häufige Fallstricke

  • Direkt nach dem Einfügen aufrufen. Führen Sie mysqli_insert_id() / lastInsertId() bevor Sie eine weitere Abfrage auf derselben Verbindung ausführen aus — ein späteres INSERT überschreibt den gespeicherten Wert.
  • Keine Auto-Increment-Spalte → 0. Die Funktion gibt 0 zurück (keinen Fehler), wenn die Tabelle, in die eingefügt wurde, keine AUTO_INCREMENT-Spalte hat.
  • UPDATE und DELETE ändern ihn nicht. Nur INSERT-Anweisungen, die einen Auto-Increment-Wert erzeugen, aktualisieren das Ergebnis.
  • Verwenden Sie nicht SELECT MAX(id). Ein häufiger Fehler besteht darin, die höchste ID mit SELECT MAX(id) FROM users zu lesen. Bei gleichzeitigen Einfügungen kann dies die Zeile eines anderen Benutzers zurückgeben. Die dedizierten Funktionen sind verbindungsspezifisch und sicher.

Fazit

In diesem Artikel haben wir gezeigt, wie Sie die zuletzt eingefügte ID in PHP und MySQL abrufen. Wenn Sie diese Schritte befolgen, sollten Sie in der Lage sein, die ID des zuletzt eingefügten Datensatzes in Ihrer Datenbank abzurufen. Für beste Ergebnisse fügen Sie Daten immer über Prepared Statements ein und lesen Sie die ID auf derselben Verbindung direkt nach dem Einfügen zurück.

Verwandte Kapitel: Insert Data into MySQL, Prepared Statements und Select Data from MySQL.

Übungen

Übung
Welche Methoden können verwendet werden, um die zuletzt eingefügte ID in PHP und MySQL abzurufen?
Welche Methoden können verwendet werden, um die zuletzt eingefügte ID in PHP und MySQL abzurufen?
Was this page helpful?