PDO::lastInsertId

versuch13

Erfahrenes Mitglied
Hey. Ich bin etwas verunsichert was den Gebrauch von PDO::lastInsertId (oder auch mysql_insert_id) betrifft.

Beispiel:

PHP:
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'passowd');
$stmt->prepare('INSERT ...');
$stmt->execute();
$id = $dbh->lastInsertId();

Wird in dem Fall sichergestellt dass das Ergebnis wirklich die ID des in diesem Script zuvor ausgeführten INSERT ist? Oder wird die letzte/höchste ID der Tabelle geliefert, d.h. falls gleichzeitig bzw. während des ausführen der Query und dem anfordern der ID ein weiterer neuer Datensatz eingefügt wurde (aus einer anderen Verbindung) diese ID geliefert wird?

Vielen Dank.
 
Hi,

Wird in dem Fall sichergestellt dass das Ergebnis wirklich die ID des in diesem Script zuvor ausgeführten INSERT ist?

Wenn dieser INSERT erfolgreich war, ja. Du solltest natürlich abfangen, ob die Abfrage nicht vielleicht fehlgeschlagen ist.

Oder wird die letzte/höchste ID der Tabelle geliefert,

Welche Tabelle? Die Funktion akzeptiert ja keinen Parameter $table. ;)

d.h. falls gleichzeitig bzw. während des ausführen der Query und dem anfordern der ID ein weiterer neuer Datensatz eingefügt wurde (aus einer anderen Verbindung) diese ID geliefert wird?

Nein, die Funktion ist an die Verbindung gebunden.

Aus dem MySQL-Manual:
The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.

LG
 
Das heißt die PHP Funktionen machen nichts anderes als die MySQL Funktion LAST_INSERT_ID() auszuführen?
 
Zurück