PDO erhält die zuletzt eingefügte ID

Lesezeit: 2 Minuten

PDO erhalt die zuletzt eingefugte ID
William Kinan

Ich habe eine Abfrage und möchte die zuletzt eingefügte ID erhalten. Die Feld-ID ist der Primärschlüssel und wird automatisch hochgezählt.

Ich weiß, dass ich diese Aussage verwenden muss:

LAST_INSERT_ID()

Diese Anweisung funktioniert mit einer Abfrage wie dieser:

$query = "INSERT INTO `cell-place` (ID) VALUES (LAST_INSERT_ID())";

Aber wenn ich die ID mit dieser Anweisung erhalten möchte:

$ID = LAST_INSERT_ID();

Ich bekomme diesen Fehler:

Fatal error: Call to undefined function LAST_INSERT_ID()

Was mache ich falsch?

PDO erhalt die zuletzt eingefugte ID
Corbin

Das liegt daran, dass es sich um eine SQL-Funktion handelt, nicht um PHP. Sie können verwenden PDO::lastInsertId().

Wie:

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

Wenn Sie es mit SQL anstelle der PDO-API machen möchten, würden Sie es wie eine normale Auswahlabfrage machen:

$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();

  • Ja, du hast Recht, ich habe es gefunden und es funktioniert, danke, ich werde die Antwort akzeptieren

    – William Kinan

    21. Mai 2012 um 7:21 Uhr

  • @rybo111, zuerst ist es Screaming snake case. Zweitens ist es die MySQL-Namenskonvention und nicht PHP

    – aserafati

    23. Juli 2015 um 11:56 Uhr

  • @rybo111, hmm SELECT LAST_INSERT_ID() ist eine MySQL-Funktion

    – aserafati

    23. Juli 2015 um 12:48 Uhr

  • Vielleicht ist dies eine dumme Folgefrage, aber ich möchte nur sicher sein. Wenn ich mich auf lastInsertId() verlasse, gibt es die letzte eingefügte ID zurück, die gerade in meinem aktuell ausgeführten Code passiert ist? Oder gibt es die zuletzt eingefügte ID aus meiner Datenbank zurück? Wenn ich zum Beispiel eine stark frequentierte Website habe und etwas während meines Anmeldeskripts einfüge und lastInsertId() verwende, um die eingefügte ID zu erhalten, sich aber viele Leute gleichzeitig anmelden, bin ich sicher, wenn ich mich auf lastInsertId( ), um die zuletzt eingefügte ID von dieser bestimmten Instanz des ausgeführten Codes abzurufen? Oder gehe ich ein Risiko ein

    – Art Geigel

    18. November 2015 um 19:02 Uhr

  • @ArtGeigel Dies ist die zuletzt eingefügte ID der Verbindung, die der PDO-Instanz zugrunde liegt. Mit anderen Worten, es ist in dem von Ihnen beschriebenen Szenario sicher, da gleichzeitige Abfragen in separaten Verbindungen stattfinden würden.

    – Korbin

    19. November 2015 um 6:15 Uhr

1647285247 781 PDO erhalt die zuletzt eingefugte ID
Ayhan Kesicioglu

lastInsertId() funktioniert nur nach der INSERT-Abfrage.

Richtig:

$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass) 
                              VALUES(?,?,?);");
$sonuc = $stmt->execute([$username,$email,$pass]);
$LAST_ID = $this->conn->lastInsertId();

Falsch:

$stmt = $this->conn->prepare("SELECT * FROM users");
$sonuc = $stmt->execute();
$LAST_ID = $this->conn->lastInsertId(); //always return string(1)=0

Sie können die ID der letzten Transaktion abrufen, indem Sie die Methode lastInsertId() für das Verbindungsobjekt ($conn) ausführen.

So $lid = $conn->lastInsertId();

Bitte sehen Sie sich die Dokumente an https://www.php.net/manual/en/language.oop5.basic.php

  • Willkommen bei Stapelüberlauf. Wir schätzen nützliche Beiträge, aber bitte duplizieren Sie keine vorhandenen Antworten.

    – Ihr gesunder Menschenverstand

    30. Mai 2019 um 9:56 Uhr

1002840cookie-checkPDO erhält die zuletzt eingefügte ID

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy