Lenguaje PHP

Último ID de inserción en MySQL: 5 Formas para mostrar

Último ID de inserción en MySQL. En este artículo nos enfocaremos en mostrar la ID del último registro ingresado a una tabla MySQL mediante una instrucción SQL. Veremos 5 formas de hacerlo.

Cuando estamos en pleno desarrollo de un software a veces se presenta una situación de almacenar o seleccionar el último identificador de inserción de la tabla MySQL.

¿Cómo funciona este script?

Si el valor final de la columna actualmente AUTO_INCREMENT es 19 y cuando ejecute la consulta anterior en la tabla, devolverá 20.

En PHP hay varios métodos y/o procesos que simplemente devuelve el último id de inserción de acuerdo con la consulta de inserción anterior. Veamos estos ejemplos.

Último ID de inserción en MySQL
Último ID de inserción en MySQL

5 Formas para mostrar: Último ID de inserción en MySQL

En este paso veremos 5 sentencias y clausulas para lograr nuestro objetivo

a) La función MAX(id)

Esta función es muy usada para devolver el máximo valor ingresado a una tabla MySQL mediante el ID, para obtener el ultimo id es mediante la sentencia

“SELECT MAX(id) AS id FROM tabla”

Este proceso solo funciona en campos con la propiedad auto-increment definidas en el ID. Una de las ventajas de este método con respecto a otros es que puede ser utilizado en:

  • Si se han realizado otras inserciones en otras tablas
  • El computador se ha reiniciado.
  • Después de varios días

El método siempre busca el id de mayor valor dentro de la tabla y como es auto incrementable el mayor siempre será el último registro.

Ejemplo completo de función MAX

$rs = mysqli_query($db, "SELECT MAX(id_tabla) AS id FROM tabla");
if ($row = mysqli_fetch_row($rs)) {
$id = trim($row[0]);
}

b) Función mysqli_insert_id

Devuelve el último valor de columna AUTO_INCREMENT de la consulta de inserción ejecutada anteriormente.

Sintaxis completa –

mysqli_insert_id($connection-variable)

Nota: Devuelve 0 cuando la tabla no tiene ninguna columna AUTO_INCREMENT.

$id_ultimo=mysqli_insert_id();

Ejemplo completo

<?php
$host = "localhost"; /* Nombre del servidor */
$user = "root"; /* usuario Mysql*/
$password = ""; /* Password */
$dbname = "tutorial"; /* Nombre Base de Datos */
$con = mysqli_connect($host, $user, $password,$dbname);
// Revisamos la conexion
if (!$con) {
  die("Conexion fallida: " . mysqli_connect_error());
}
// Insertar consulta
$query = "insert into users(username,fname,lname) values('Mario','Carrillo','Molina')"; 

mysqli_query($con,$query); 

// Obtener el último id de inserción
$lastid = mysqli_insert_id($con); 

echo "Ultimo ID : ".$lastid; 
?>

Salida en el navegador

El codigo anterior al ser ejecutado, elnavegador solo devolvera como resultado 4

Ultimo ID : 4

c) Función last_insert_id()

Esta es otra alternativa para lograr el mismo objetivo y nos referimos a la función last_insert_id(), a continuación muestro un ejemplo completo de su funcionamiento.

mysql> insert into autobuses (ciudad_origen, ciudad_destino)
VALUES ('Barcelona', 'Zaragoza');
Query OK, 1 row affected (0.02 sec)

Podemos recuperar el valor del último registro generado con last_insert_id()

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)

Nota: Hay que aclarar que el valor de last_insert_id() es privado para la sesión que ejecuta las llamadas a columnas de tipo AUTO_INCREMENT, nadie más excepto nuestra sesión tendrá acceso al identificador de registro generado y es recomendable si estamos trabajando por ejemplo con tablas (facturas, detalles_factura).

d) Usando la función lastInsertId

Esta es una solución para obtener el identificador de la última fila insertada mediante el método lastInsertId de PDO PHP. En caso de que no estés al tanto de las últimas actualizaciones: Recordemos que PDO es una extensión PHP popular que proporciona una interfaz para acceder a bases de datos de manera segura y recomendada.

¿Cómo funciona este script?

En el ejemplo siguiente, insertaré algunos datos en esta tabla antes de recuperar el identificador de la última fila insertada:

$pdo = new PDO("mysql:host=$dbServer;dbname=$dbName", $dbUser, $dbPassword);
//Cree nuestra instrucción SQL, que inserta datos en la tabla
$insertSql = "
    INSERT INTO `posts` 
      (`title`, `body`, `date_posted`)
    VALUES
      (:title, :body, :date_posted)
";

//Prepare nuestra instrucción SQL.
$statement = $pdo->prepare($insertSql);
//Ejecute la instrucción SQL.
$statement->execute(array(
    "title" => 'Test post!',
    "body" => 'This is just a test!',
    "date_posted" => date("Y-m-d H:i:s")
));

//Obtenga el identificador de la última fila insertada mediante el uso de
//el PDO::lastInsertId método.
$id = $pdo->lastInsertId();
//Imprima el resultado con fines de ejemplo.
echo 'El id de la última fila insertada fue: ' . $id;

 

En el ejemplo de código PHP anterior, nosotros:

  • Conectado a MySQL mediante la extensión PDO.
  • Insertamos una nueva fila en nuestra tabla usando instrucciones preparadas.
  • Hemos recuperado el identificador de la última fila insertada mediante el método lastInsertId de PDO.
  • Por último, imprimimos el ID para fines de ejemplo.

e) Uso de lastInsertId.

Si tu proyecto en desarrollo es PDO aquí tenemos un ejemplo completo y si usa transacciones de base de datos, tenga en cuenta que tendrá que llamar al método lastInsertId ANTES de confirmar los cambios. Si intenta obtener el identificador de la última fila insertada después de confirmar los cambios, recibirá el valor ‘0’.

A continuación se muestra cómo utilizar lastInsertId con transacciones:

try{
    $pdo->beginTransaction();
    $insertSql = "
        INSERT INTO `posts` 
          (`title`, `body`, `date_posted`)
        VALUES
          (:title, :body, :date_posted)
    ";
    $statement = $pdo->prepare($insertSql);
    $statement->execute(array(
        "title" => 'Ejemplo de transacción.',
        "body" => 'Insertar esto dentro de una transacción!',
        "date_posted" => date("Y-m-d H:i:s")
    ));

    $id = $pdo->lastInsertId();
    $pdo->commit();
    echo 'El id de la última fila insertada fue: ' . $id;
}

catch(Exception $e){
    echo $e->getMessage();
    $pdo->rollBack();
}

Como puede ver, llamamos al método lastInsertId antes de confirmar nuestros cambios. Si cambia el código anterior y llama a lastInsertId después de confirmar los cambios, el resultado será el siguiente:

El ID de la última fila insertada fue: 0

Otro ejemplo

$stmt = $db->prepare("insert into ....");
$stmt->execute();
$id = $db->lastInsertId();// imprime el ultimo id guardado

Con suerte, usted encontró este tutorial para ser algo útil!

Conclusión

Ahora ya sabe cómo obtener el último valor de id de inserción con 5 ejemplos completos mediante un método incorporado.

Si mantiene la columna id manualmente y no utiliza AUTO_INCREMENT en la tabla MySQL, entonces no es una buena opción puede ir con otras opciones.

La recomendación es usar en el ID el atributo AUTO_INCREMENT de manera obligatoria para obtener resultados deseados.

Puede obtener más información sobre el método mysqli_insert_id() desde aquí.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

4 comentarios

  1. Tambien se puede obtener con la variable de entorno @@identity. Invocandola acto seguido a la insercion y preferiblemente dentro de una transaccion, para asegurarse que sea el ultimo registro.

    1. Hola Jhael,

      Puedes realizar una consulta SQL usando la clausula MAX, con esto obtendrás el máximo numero de un campo y obviamente el ultimo o mayor número. Sin embargo, el campo tendrá que ser numérico para usar MAX.

      Espero haberte ayudado.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba