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?
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();
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