entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Obtener id del ultimo registro insertado mysql con PDO

Buen día, tengo un problema al momento de registrar, uso PDO para realizar este proceso.

Me registra sin problemas llenando en la base de datos, pero quiero que al guardarse me muestre el ID que creo automaticamente, uso lastInsertId() pero me muestra 0 en cada registro. Estoy utilizando $_SESSION['message'] por lo que no me deja ponerlo en la parte de abajo ya que me da error. Aquí el código:

include_once('conexion.php');

if(isset($_POST['agregar'])){
    $database = new Connection();
    $db = $database->open();
    try{

        $nombre = $_POST['nombre'];
        $email = $_POST['email'];
        $stmt = $db->prepare("INSERT INTO alumnos (Nombre_Alumno, Email, Telefono, Ciudad) VALUES (:nombre, :email, :telefono, :ciudad)");
        $id = $db->lastInsertId();

        $_SESSION['message'] = ( $stmt->execute(array(':nombre' => $_POST['nombre'], ':email' => $_POST['email'], ':telefono' => $_POST['telefono'], ':ciudad' => $_POST['ciudad'])) ) ? "Se ha agregado al alumno <b>$nombre</b> con el Email: <b>$email</b> <br> y el ID# <b>$id</b>" : 'Algo salió mal. No se puede agregar al alumno, verifique los datos.';    

    }
    catch(PDOException $e){
        $_SESSION['message'] = $e->getMessage();
    }
    $database->close();
}

else{
    $_SESSION['message'] = 'Llene el formulario';
}

header('location: index.php');

Se que debe estar después de "$stmt->execute" pero si lo pongo antes o después del "?" me da error con el ";", no me sale como debería ¿Qué puedo hacer en este caso?

1 Respuesta

3votos

mchojrin Puntos2590

Hola @Gabriela-0310,

Te sugiero, para comenzar, no utilizar la sintaxis abreviada en este caso.

$_SESSION['message'] = ( $stmt->execute(array(':nombre' => $_POST['nombre'], ':email' => $_POST['email'], ':telefono' => $_POST['telefono'], ':ciudad' => $_POST['ciudad'])) ) ? "Se ha agregado al alumno <b>$nombre</b> con el Email: <b>$email</b> <br> y el ID# <b>$id</b>" : 'Algo salió mal. No se puede agregar al alumno, verifique los datos.';

Se hace difícil de leer y, siendo que trae efectos colaterales pienso que puede ser algo confuso.

En tu caso, el problema parece ser que estás invocando

$id = $db->lastInsertId();

Antes de que la consulta sea ejecutada, con lo cual, el registro no ha sido insertado aún y, por lo tanto, su id aún no ha sido creado.

Saludos,

1voto

Gabriela-0310 comentado

Si, muchas gracias, ya lo pude arreglar, ahora si me esta dando el ID que genera, lo coloco en la última parte:

"Se ha agregado correctamente al alumno <b>$nombre</b> con el Email: <b>$email</b> <br> El ID correspondiente es <b>".$id = $db->lastInsertId()

De esta forma me lo muestra correctamente al momento de registrar.

1voto

mchojrin comentado

Excelente! Cualquier duda me puedes consultar.

Saludos,

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta