33 Votos

MySQL/PHP: Cómo recuperar el último INSERT ID

Información de Stefan Trost | 23/11/2023 a las 21:37

Cuando insertamos un nuevo registro en una tabla MySQL y la tabla contiene una columna AUTO_INCREMENT, se asigna automáticamente un nuevo ID único a nuestro registro, sin que sepamos al principio qué ID es (si no hemos especificado explícitamente una ID para usar). Sin embargo, a veces necesitamos exactamente esta ID en nuestro script posterior. Donc, en esta info me gustaría mostrarle cómo obtener esta ID.

Queremos echar un vistazo a dos enfoques diferentes: en nuestro primer ejemplo usamos la función PHP mysqli_insert_id() para leer el ID. Después de eso, en nuestro segundo ejemplo, veremos una posibilidad alternativa que funciona exclusivamente con MySQL.

Primera Vía: mysqli_insert_id

PHP nos proporciona la función mysqli_insert_id(), que hará exactamente esta tarea por nosotros. He aquí un ejemplo:

mysqli_query($db, "INSERT INTO tab (fname) VALUES ('Anne')");
$id = mysqli_insert_id($db);
mysqli_query($db, "UPDATE tab SET fname = 'Anna' WHERE id = $id");

En este ejemplo, primero agregamos una nueva fila a la tabla "tab" y luego determinamos el ID creado durante este proceso usando mysqli_insert_id(). Después de eso, utilizamos esta ID para realizar un cambio en los datos almacenados previamente.

Importante: mysqli_insert_id() siempre hace referencia a la última consulta realizada. Por lo tanto, debe recuperar el ID, si es necesario, siempre inmediatamente después de la consulta INSERT, porque de lo contrario ya no se podrá acceder al ID. Si la última consulta no genera un ID AUTO_INCREMENT, mysqli_insert_id() devuelve el valor 0. Si una instrucción INSERT ha generado múltiples IDs, se devolverá el primer valor creado exitosamente por esta instrucción.

Segunda Vía: LAST_INSERT_ID

A continuación, me gustaría presentarle otra opción que puede usar directamente en MySQL sin PHP:

SELECT LAST_INSERT_ID()

LAST_INSERT_ID() siempre nos da el último ID asignado. A diferencia de mysqli_insert_id(), esto también funciona cuando se realizan otras consultas mientras tanto. Por lo tanto, con esto, puede averiguar la ID, incluso si el último comando INSERT es hace algún código.

Con "SELECT LAST_INSERT_ID()" obtenemos directamente el último ID como resultado de nuestra instrucción. Sin embargo, también podemos usar LAST_INSERT_ID() directamente en otras instrucciones de MySQL, por ejemplo para insertar el último ID en una tabla:

INSERT INTO tab (id, pid) VALUES (1, LAST_INSERT_ID());

O para poder acceder al registro de datos recién insertado en otra instrucción:

INSERT INTO tab (fname) VALUES ('Anne');
UPDATE tab SET fname = 'Anna' WHERE id = LAST_INSERT_ID();

Con esto, hemos recreado el ejemplo de PHP de la última sección con MySQL puro sin ningún desvío por PHP.

ResponderPositivoNegativo

Sobre el Autor

AvatarPuede encontrar software de Stefan Trost en la pagina es.sttmedia.com. ¿Necesita un software individual según sus propios requisitos? Escribenos: es.sttmedia.com/contacto
Ver Perfil

 

Temas Relacionados

CSS: Cómo incluir CSS en HTML

Tutorial | 0 Comentarios

SQLite: Examinar si existe una Tabla

Información | 0 Comentarios

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.