Start · Sprachen · PHP · Referenz · mysqli_insert_id

mysqli_insert_id

Funktion

Liefert den automatisch generierten Wert (AUTO_INCREMENT-ID), der bei der letzten INSERT- oder UPDATE-Anweisung erzeugt wurde.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_insert_id(mysqli $mysql): int|string

Beschreibung

mysqli_insert_id() gibt die ID zurück, die von der Datenbank für eine Spalte mit dem Attribut AUTO_INCREMENT erzeugt wurde. Dies ist nützlich, wenn nach einem INSERT die neu angelegte Datensatz-ID für weitere Abfragen (z. B. Verknüpfungen in anderen Tabellen) benötigt wird.

Der Rückgabewert ist 0, wenn die letzte Anweisung kein AUTO_INCREMENT-Wert erzeugt hat, oder wenn die Verbindung noch keine Anweisung ausgeführt hat. Wurde ein sehr großer Wert generiert (größer als PHP_INT_MAX), wird der Wert als String zurückgegeben, andernfalls als Integer.

Die Funktion gilt immer für die zuletzt ausgeführte Anweisung auf der angegebenen Verbindung. Bei parallelen Verbindungen oder in Transaktionen ist der Rückgabewert eindeutig pro Verbindung, sodass keine Konflikte mit gleichzeitigen Einfügevorgängen anderer Verbindungen entstehen.

In objektorientiertem Stil steht diese Funktion als Eigenschaft $mysqli->insert_id zur Verfügung.

Parameter

Name Typ Default Beschreibung
$mysql Pflicht mysqli Ein von mysqli_connect() oder mysqli_init() erzeugtes MySQLi-Verbindungsobjekt.

Rückgabewert

Typ
int|string
Beschreibung
Gibt die bei der letzten INSERT- oder UPDATE-Anweisung automatisch generierte ID zurück. Der Typ ist int, solange der Wert in den PHP-Integer-Bereich passt, andernfalls string. Wurde kein AUTO_INCREMENT-Wert erzeugt, wird 0 zurückgegeben.

Beispiele

Neue Zeile einfügen und deren ID auslesen

<?php
$mysqli = mysqli_connect('localhost', 'benutzer', 'passwort', 'testdb');

if (!$mysqli) {
    die('Verbindung fehlgeschlagen: ' . mysqli_connect_error());
}

$sql = "INSERT INTO benutzer (name, email) VALUES ('Max Mustermann', 'max@example.com')";

if (mysqli_query($mysqli, $sql)) {
    $neuId = mysqli_insert_id($mysqli);
    echo 'Neuer Datensatz eingefügt mit ID: ' . $neuId;
} else {
    echo 'Fehler: ' . mysqli_error($mysqli);
}

mysqli_close($mysqli);
Neuer Datensatz eingefügt mit ID: 42

Objektorientierter Stil mit Prepared Statement

<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');

if ($mysqli->connect_errno) {
    die('Verbindung fehlgeschlagen: ' . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("INSERT INTO produkte (bezeichnung, preis) VALUES (?, ?)");
$stmt->bind_param('sd', $bezeichnung, $preis);

$bezeichnung = 'PHP-Handbuch';
$preis = 29.99;
$stmt->execute();

echo 'Eingefügtes Produkt hat die ID: ' . $mysqli->insert_id;

$stmt->close();
$mysqli->close();
Eingefügtes Produkt hat die ID: 7

Verwendung nach einer UPDATE-Anweisung mit AUTO_INCREMENT

<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');

// UPDATE, das intern AUTO_INCREMENT auslöst (z. B. via LAST_INSERT_ID() in SQL)
$mysqli->query("UPDATE einstellungen SET wert = LAST_INSERT_ID(wert + 1) WHERE schluessel = 'zaehler'");

$neuerWert = $mysqli->insert_id;
echo 'Neuer Zählerwert: ' . $neuerWert;

$mysqli->close();
Neuer Zählerwert: 15

// Wichtig · Fallstricke

Reihenfolge beachten: mysqli_insert_id() muss unmittelbar nach der relevanten Abfrage aufgerufen werden, da jede nachfolgende Anweisung den Wert überschreiben kann.

Kein AUTO_INCREMENT: Wurde in der letzten Anweisung kein AUTO_INCREMENT-Wert erzeugt (z. B. bei reinen SELECT-Abfragen oder Tabellen ohne diese Spalte), gibt die Funktion 0 zurück — nicht false oder null.

Große IDs: Bei sehr großen IDs (BIGINT UNSIGNED), die den PHP-Integer-Maximalwert überschreiten, wird der Wert als string zurückgegeben. Typvergleiche mit === sollten daher vorsichtig verwendet werden.

Transaktionen: Innerhalb einer Transaktion ist der Rückgabewert auch nach einem ROLLBACK noch verfügbar, da die ID bereits intern inkrementiert wurde und der Zähler nicht zurückgesetzt wird.