Pregunta sobre database, pdo, mysql, php – DOP obtener la última ID insertada

131

Tengo una consulta y quiero insertar la última ID. 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 declaració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 declaración:

$ID = LAST_INSERT_ID();

Me sale este error:

Fatal error: Call to undefined function LAST_INSERT_ID()

¿Qué estoy haciendo mal?

Tu respuesta

2   la respuesta
286

PDO::lastInsertId().

Me gusta:

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

Si desea hacerlo con SQL en lugar de la API de PDO, lo haría como una consulta de selección normal:

$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();
Al trabajar con PDO, ejecuta una inserción, seguida de una consulta SELECT que no tiene nada que ver con la inserción, finalmente,pdo::lastInsertId() ¿Afecta el último valor de ID de inserción devuelto? Noté que obtengo 0 al hacer esa consulta SELECT adicional antes de llamarlastInsertId(). Corriendopdo::query('SELECT LAST_INSERT_ID()') aunque todavía me dará el último valor de identificación insertado esperado. georaldc
@Bludream nunca dijo que no lo era;) rybo111
@Corbin: borro la parte, tenías razón. Mimouni
@Bludream Sí,SCREAMING_SNAKE_CASE se menciona en ese enlace de Wiki.lastInsertId es una función de objeto de datos PHP. PHP utiliza amboscamelCase (lastInsertId) ysnake_case (str_replace). rybo111
6

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
Mal ejemplo, las variables no tienen lugar en las consultas. Use declaraciones preparadas:php.net/manual/en/pdo.prepared-statements.php Wouter van Eekelen

Preguntas relacionadas