Taller > PHP > Base de Datos MySQL
Obtener el Último ID Insertado de MySQL con PHP
Cuando insertas un registro en una tabla MySQL que tiene un campo AUTO_INCREMENT, puedes obtener el ID que se generó automáticamente para ese registro inmediatamente después de realizar la inserción.
Esto es útil cuando necesitas hacer referencia al registro recién insertado, como cuando trabajas con relaciones entre tablas.
La Sentencia INSERT INTO
Supongamos que tenemos la siguiente tabla llamada products:
CREATE TABLE products (
product_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
El campo product_id es un campo de tipo AUTO_INCREMENT, por lo que cada vez que insertamos un nuevo producto, MySQL genera un ID único automáticamente.
Obtener el ID del Último Registro Insertado Usando MySQLi Orientado a Objetos
A continuación, te mostramos cómo insertar un nuevo registro en la tabla products y obtener el ID del último registro insertado utilizando MySQLi en su modo orientado a objetos.
<?php
$servidor = "localhost";
$usuario = "usuario";
$contraseña = "contraseña";
$base_datos = "tienda_db";
// Crear conexión
$conn = new mysqli($servidor, $usuario, $contraseña, $base_datos);
// Verificar conexión
if ($conn->connect_error) {
die("Error en la conexión: " . $conn->connect_error);
}
// SQL para insertar un nuevo producto
$sql = "INSERT INTO products (product_name, price) VALUES ('Laptop', 799.99)";
// Ejecutar la consulta y obtener el último ID insertado
if ($conn->query($sql) === TRUE) {
$ultimo_id = $conn->insert_id;
echo "Nuevo producto creado exitosamente. Último ID insertado: " . $ultimo_id;
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
// Cerrar la conexión
$conn->close();
?>
Descripción:
En este ejemplo, primero se establece una conexión a la base de datos utilizando MySQLi en su modo orientado a objetos. Después de insertar el nuevo producto, utilizamos la propiedad $conn->insert_id para obtener el ID generado por MySQL para el registro recién insertado. Finalmente, mostramos el ID y cerramos la conexión.
Obtener el ID del Último Registro Insertado Usando MySQLi Procedural
A continuación, mostramos cómo realizar la misma operación utilizando MySQLi en su modo procedural.
<?php
$servidor = "localhost";
$usuario = "usuario";
$contraseña = "contraseña";
$base_datos = "tienda_db";
// Crear conexión
$conn = mysqli_connect($servidor, $usuario, $contraseña, $base_datos);
// Verificar conexión
if (!$conn) {
die("Error en la conexión: " . mysqli_connect_error());
}
// SQL para insertar un nuevo producto
$sql = "INSERT INTO products (product_name, price) VALUES ('Smartphone', 499.99)";
// Ejecutar la consulta y obtener el último ID insertado
if (mysqli_query($conn, $sql)) {
$ultimo_id = mysqli_insert_id($conn);
echo "Nuevo producto creado exitosamente. Último ID insertado: " . $ultimo_id;
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
// Cerrar la conexión
mysqli_close($conn);
?>
Descripción:
En este ejemplo, realizamos el mismo proceso, pero utilizando MySQLi en su modo procedural. La función mysqli_insert_id($conn) devuelve el ID del último registro insertado.
Obtener el ID del Último Registro Insertado Usando PDO
Finalmente, aquí te mostramos cómo hacer lo mismo utilizando PDO.
<?php
$servidor = "localhost";
$usuario = "usuario";
$contraseña = "contraseña";
$base_datos = "tienda_db_pdo";
try {
// Crear conexión PDO
$conn = new PDO("mysql:host=$servidor;dbname=$base_datos", $usuario, $contraseña);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SQL para insertar un nuevo producto
$sql = "INSERT INTO products (product_name, price) VALUES ('Tablet', 299.99)";
// Ejecutar la consulta
$conn->exec($sql);
// Obtener el último ID insertado
$ultimo_id = $conn->lastInsertId();
echo "Nuevo producto creado exitosamente. Último ID insertado: " . $ultimo_id;
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
// Cerrar la conexión
$conn = null;
?>
Descripción:
En este ejemplo, utilizamos PDO para insertar un nuevo registro en la tabla products y obtener el último ID insertado utilizando el método $conn->lastInsertId(). Este método es equivalente a las funciones de MySQLi, pero en el contexto de PDO.
Conclusión
Obtener el ID del último registro insertado en una tabla MySQL es una tarea común cuando trabajamos con campos AUTO_INCREMENT.
Ya sea que uses MySQLi o PDO, el proceso es sencillo y puedes acceder a este ID inmediatamente después de realizar una operación INSERT.
Esto es útil cuando necesitas hacer referencia al registro recién creado, como al insertar datos relacionados en otras tablas.