Frage an pdo, mysql, php, database – PDO erhält die letzte eingegebene ID

131

Ich habe eine Frage und möchte die letzte eingegebene ID erhalten. Die Feld-ID ist der Primärschlüssel und das automatische Inkrementieren.

Ich weiß, dass ich diese Aussage verwenden muss:

LAST_INSERT_ID()

Diese Anweisung funktioniert mit einer Abfrage wie der folgenden:

$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 erhalte diesen Fehler:

Fatal error: Call to undefined function LAST_INSERT_ID()

Was mache ich falsch?

Deine Antwort

2   die antwort
6

Richtig:

$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass) 
                              VALUES($username,$email,$pass)");
$sonuc = $stmt->execute();
$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
Schlechtes Beispiel, Variablen haben keinen Platz in Abfragen. Verwenden Sie vorbereitete Anweisungen:php.net/manual/en/pdo.prepared-statements.php Wouter van Eekelen
286

dass es sich um eine SQL-Funktion handelt, nicht um PHP. Sie können verwendenPDO::lastInsertId().

Mögen:

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

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

$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();
Ihre Antwort hat für mich ganz einfach funktioniert Humphrey
@Bludream hat nie gesagt, dass es nicht so ist;) rybo111
@Corbin: Ich lösche das Teil, du hattest recht. Mimouni
Wenn Sie mit PDO arbeiten, wird ein Insert ausgeführt, gefolgt von einer SELECT-Abfrage, die nichts mit dem Insert zu tun hat, und schließlich einpdo::lastInsertId() den zuletzt zurückgegebenen Wert der Einfüge-ID beeinflussen? Ich habe festgestellt, dass ich bei dieser zusätzlichen SELECT-Abfrage vor dem Aufruf 0 zurückbekommelastInsertId(). Laufenpdo::query('SELECT LAST_INSERT_ID()') Trotzdem erhalte ich immer noch den zuletzt eingegebenen ID-Wert. georaldc

Verwandte Fragen