dominios y alojamiento web en hostalia

Recibir el último ID de una inserción con PHP y MySQL

29 de marzo de 2004
Valoración del artículo:
Código para conseguir el último ID de inserción de una tupla.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Creamos este artículo para responder una duda que nos han preguntado alguna vez en nuestro correo. Se trata sobre conseguir el último identificador de un registro insertado en la base de datos, programando con PHP y con la base de datos MySQL.

Realmente es una duda muy sencilla de solucionar, gracias al rico juego de funciones de PHP para trabajar con bases de datos MySQL. Existe una función que nos devuelve directamente el identificador de la última inserción, utilizando la conexión a la base de datos que se le pase por parámetro, o la última conexión utilizada en caso de que no se le indique parámetro.

mysql_insert_id($connectid)

Ejemplo de utilización

Veamos un ejemplo de la utilización de esta función, en el que se realizan las acciones necesarias para insertar un elemento en la base de datos. En este ejemplo utilizaremos una base de datos llamada "test" y la tabla "cliente".

//conecto con la base de datos
$connectid = mysql_connect("localhost","root","");

//selecciono la base de datos a utilizar
mysql_select_db("test",$connectid);

//Sentencia de inserción del elemento
$ssql = "INSERT INTO cliente (nombre_cliente, cif, direccion, email) VALUES ('xxx Nombre empresa', 'B3331113', 'C/ Corona 2', 'eepe@relll.com')";

//lo inserto en la base de datos
if (mysql_query($ssql,$connectid)){

    //recibo el último id
    $ultimo_id = mysql_insert_id($connectid);
    echo $ultimo_id;
}else{
    echo "La inserción no se realizó";
}


Primero se conecta con MySQL y se selecciona la base de datos a utilizar. Luego se genera una sentencia SQL de inserción en una supuesta tabla de clientes. Si la ejecución de esta sentencia es correcta se recibe el último ID con la función insert_id(). Si la ejecución de la sentencia falla, muestra un mensaje de error.

Fijémonos que insert_id() recibe el identificador de la conexión, devuelto por mysql_connect() y no el identificador de resultado de la consulta, que devuelve mysql_query() cuando se ejecutan sentencias de selección en la base de datos.

Compartir en redes sociales

Comentarios
Fueron enviados 12 comentarios al artículo
2 comentarios no revisados
10 comentarios revisados:
Por: Jose Corbacho
13/4/2004
Para evitar posibles problemas de concurrencia siempre es recomendable antes de un insert o update realizar mysql_query("LOCK TABLES mitabla WRITE",$link) y una vez hecha la consulta desbloquear las tablas mysql_query("UNLOCK TABLES",$link)

Un saludo
Por: Jorge
12/6/2004
En la descripción de la funcion se especifica claramente que devuelve el valor del ULTIMO ID INSERTADO.

Que sucede si al mismo tiempo se insertan dos IDS? que garantiza q el q estemos recibiendo es el q le corresponde a un usuario en particular? podría recibir el de otra conexion?
Por: Jesús Genicio
30/11/2004
Estimados amigos:

De seguro soy un poco burro. Estoy usando esta función para vinvular una tuplas a otra, y me daba error.

al leer el artículo, me di cuenta de que estaba haciendo:

$resultado=mysql_query($sql,$link);
$id= mysql_insert_id($resultado);

cuando debí hacer
$resultado=mysql_query($sql,$link);
$id= mysql_insert_id($link);

Muchas gracias amigos.
Por: Alex Tierno
10/12/2004
En principio, utilizando el método LOCK/UNLOCK no hay problema de confusión de id's siempre y cuando se haga la consulta "mysql_insert_id($link)" antes del UNLOCK
Por: Oloranube
28/11/2005
Leyendo un poco la documentación de la función mysql_insert_id() he sacado la conclusión de que no hay problemas con la concurrencia porque dicha función debe recibir el identificador de la conexión a la base de datos y devuelve el identificador de la última inserción producida en esa conexión. El identificador devuelto es el valor de un campo del tipo AUTO_INCREMENT o cero si no existe un campo con estas características.

PD: Como estoy aprendiendo les diré que no me hagan mucho caso, pero eso me ha parecido que cuenta la documentación. Espero haber leído bien.
Por: Henry
21/4/2006
Si la instrucción mysql_insert_id me devuelve el ultimo registro guardado, que pasa si yo estoy digitando junto con otros usuarios en la misma aplicación?
Lo que pasa es que A CADA USUARIO le debe traer el ultimo registro insertado por el para incrementar un campo de ese usuario?
Por: Javier
03/5/2006
Hola.

A la función mysql_insert_id() se le pasa como parámtero la ID de la conexión a la base de datos. Esta ID es única para cada conexión (si simultáneamente se estan ejecutando dos script que tienen realizada una conexión a MySQL, cada uno tendrá una ID única), por tanto, lo que devuelve la función mysql_insert_id() sólo es de nuestra conexión.

Espero que les sirva.

Un saludo.
Por: JC
14/2/2007
hola:

hice el ejemplo pero con mas campos y tablas diferentes, revise cada punto que tocan ustedes respecto a los posibles errores, todo indica que esta bien, pero segun el resultado es "la insercion no se realizo" no se cual puede ser el problema, lo que deseo es que no me aprezaca este comentario y que realmente se guarde ya intenete muchas veces y no lo consigo.... tengo un campo autoincrementable.

Por: spawnid
09/5/2007
que sucede si en ese momento se insertan concurrente mente varios registros a la misma tabla

gracias
repeto a la conxxion
Por: rubi
05/11/2009
a mi me manda dierecto a q no se pudo enviar infomacion por que com lo evito

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...