web-dev-qa-db-fra.com

PDO obtenir le dernier ID inséré

J'ai une requête et je veux obtenir le dernier ID inséré. Le champ ID est la clé primaire et l'incrémentation automatique.

Je sais que je dois utiliser cette déclaration:

LAST_INSERT_ID()

Cette déclaration fonctionne avec une requête comme celle-ci:

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

Mais si je veux obtenir l'ID en utilisant cette déclaration:

$ID = LAST_INSERT_ID();

Je reçois cette erreur:

Fatal error: Call to undefined function LAST_INSERT_ID()

Qu'est-ce que je fais mal?

141
William Kinaan

C'est parce que c'est une fonction SQL, pas PHP. Vous pouvez utiliser PDO::lastInsertId() .

Comme:

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

Si vous voulez le faire avec SQL au lieu de l'API PDO, vous le feriez comme une requête select normale:

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

lastInsertId () ne fonctionne qu'après la requête INSERT.

Correct:

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

Incorrect:

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