2012-05-21 37 views
104

Tengo una consulta, y quiero obtener la última identificación insertada. El ID de campo es la clave principal y el incremento automático.PDO obtener la última identificación insertada

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 la ID mediante esta declaración:

$ID = LAST_INSERT_ID(); 

me sale este error:

Fatal error: Call to undefined function LAST_INSERT_ID() 

¿Qué estoy haciendo mal?

Respuesta

220

Eso es porque es una función SQL, no PHP. Puede usar PDO::lastInsertId().

igual:

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

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

$stmt = $db->query("SELECT LAST_INSERT_ID()"); 
$lastId = $stmt->fetchColumn(); 
+0

sí que correcto, lo encontré y funciona, gracias, voy a aceptar la respuesta –

+2

@IllyasMimouni puede explicar por favor ¿Cómo su edición ofrece más seguridad? Envolver una sola declaración en una transacción no ofrece nada. – Corbin

+0

@ Corbin: eliminé la parte, tenías razón. – Mimouni

4

lastInsertId() sólo funciona después de la consulta INSERTAR.

correcta:

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

incorrecta:

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

Mal ejemplo, las variables no tienen cabida en las consultas. Use declaraciones preparadas: http://php.net/manual/en/pdo.prepared-statements.php –

Cuestiones relacionadas