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?

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

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