PDO obtener el último ID insertado
Tengo una consulta, y quiero obtener el último ID insertado. El ID de campo es la clave principal y el incremento automático.
Sé que tengo que usar esta declaración:
LAST_INSERT_ID()
Esa instrucción funciona con una consulta como esta:
$query = "INSERT INTO `cell-place` (ID) VALUES (LAST_INSERT_ID())";
Pero si quiero obtener el ID usando esta instrucción:
$ID = LAST_INSERT_ID();
Obtengo este error:
Fatal error: Call to undefined function LAST_INSERT_ID()
¿Qué estoy haciendo mal?
120
Author: William Kinaan, 2012-05-21
2 answers
Eso es porque es una función SQL, no PHP. Puede utilizar PDO::lastInsertId()
.
Como:
$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();
Si desea hacerlo con SQL en lugar de la API PDO, lo haría como una consulta select normal:
$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();
259
Author: Corbin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-01 08:06:05
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-01 08:06:05
LastInsertId() solo funciona después de la consulta INSERT.
Correcto:
$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass)
VALUES($username,$email,$pass)");
$sonuc = $stmt->execute();
$LAST_ID = $this->conn->lastInsertId();
Incorrecto:
$stmt = $this->conn->prepare("SELECT * FROM users");
$sonuc = $stmt->execute();
$LAST_ID = $this->conn->lastInsertId(); //always return string(1)=0
4
Author: Ayhan Kesicioğlu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-18 07:32:23
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-18 07:32:23