Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

MYSQL - last_insert_id

Estas en el tema de MYSQL - last_insert_id en el foro de Bases de Datos General en Foros del Web. Estoy teniendo problemas con esta función que siempre me trae como resultado el valor 0. ¿Alguna idea de lo que puede estar pasando? Gracias....
  #1 (permalink)  
Antiguo 03/06/2009, 22:52
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 4 meses
Puntos: 7
MYSQL - last_insert_id

Estoy teniendo problemas con esta función que siempre me trae como resultado el valor 0.

¿Alguna idea de lo que puede estar pasando?

Gracias.
  #2 (permalink)  
Antiguo 03/06/2009, 23:16
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: MYSQL - last_insert_id

Mira aca el comportamiento de la función
http://c.conclase.net/mysql/index.ph...LAST_INSERT_ID

siempre te da 0, por que esta función tiene como objetivo, recoger la secuencia auto-increment de una tabla que acaba de ser insertada.

Por ejemplo:

Código mysql:
Ver original
  1. Query OK, 0 rows affected (0.06 sec)
  2.  
  3. mysql> insert into ejemplo values(1,1);
  4. Query OK, 1 row affected (0.00 sec)
  5.  
  6. +------------------+
  7. +------------------+
  8. |                0 |
  9. +------------------+
  10. 1 row in set (0.00 sec)
  11.  
  12. mysql> insert into ejemplo (campo) values(2);
  13. Query OK, 1 row affected (0.00 sec)
  14.  
  15. +------------------+
  16. +------------------+
  17. |                2 |
  18. +------------------+
  19. 1 row in set (0.00 sec)

Fijate cuando se inserta en la tabla, y el registro no es asignado automaticamente por el campo auto_increment, la función no tiene efecto.
pero cuando se inserta automaticamente el campo auto_increment, la función last_insert_id funciona bien.

En teoría ese es el problema que se te presenta.

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 04/06/2009, 10:29
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 4 meses
Puntos: 7
Respuesta: MYSQL - last_insert_id

Estoy haciendo la inserción como tiene que ser, y me trae 0, por eso mi pregunta.

Para hacerlo simple, un ejemplo de lo que me pasa:

--------------------------------------------------------------------
Tabla pais:
--------------------------------------------------------------------
id autonumérico integer
pais_nombre varchar(45)
--------------------------------------------------------------------

Código SQL:
Ver original
  1. INSERT INTO pais (pais_nombre) VALUES ('Noruega');
  2. SELECT last_insert_id();

Eso ahí me trae 0.
  #4 (permalink)  
Antiguo 04/06/2009, 10:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: MYSQL - last_insert_id

Nunca he confiado mucho en esta función, sin embargo mira esto

http://www.bigresource.com/MYSQL-How...-YaNqYJov.html

Puede servirte.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 04/06/2009, 11:02
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 4 meses
Puntos: 7
Respuesta: MYSQL - last_insert_id

Yo ya lo he utilizado antes y en el mismo servidor y funcionaba de maravillas, lo que no logro es entender por qué ahora no.

Lo probé con PHP y en MySQL Query Browser y no funciona (antes me funcionaba en ambas). Hice una inserción por consola y ahí sí me tiró bien el resultado.

¡¿Por qué pasa esto?!

EDITO:--------------------------------------------------------------

Ahora probando encuentro que sucede que me cambia de conexión, cada vez que ejecuto una sentencia desde PHP o MySQL Query, me asigna una nueva conexión, creando otra sesión y perdiendo los valores que busco (el último id insertado)...

¿Alguna idea de cómo puedo solucionar esto? Necesariamente tengo que usar esto en PHP.

Saludos.

Última edición por Adolfiten; 04/06/2009 a las 11:25
  #6 (permalink)  
Antiguo 04/06/2009, 12:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: MYSQL - last_insert_id

Yo lo haría con

Código sql:
Ver original
  1. SELECT MAX(id) FROM pais;

El resultado es el mismo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 04/06/2009, 12:42
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 4 meses
Puntos: 7
Respuesta: MYSQL - last_insert_id

No puedo hacerlo de esa manera porque el sistema que estoy trabajando va a tener una cantidad de usuarios importante y todos van a poder escribir las tablas simultáneamente, y para tablas que dan soporte a clases que heredan de otras necesito sí o sí no perder esa referencia a la clase padre, y esto como trabaja por sesión viene bárbaro.

MySQL Query usa una conexión distinta para ejecución de sentencias varias, las separa digamos.

Lo de PHP lo acabo de resolver, entre tantos campos de la inserción se me había desfasado uno, pequeño y estúpido error.

Agradezco por vuestro tiempo.
  #8 (permalink)  
Antiguo 30/12/2009, 18:39
 
Fecha de Ingreso: diciembre-2009
Ubicación: Guayaquil
Mensajes: 16
Antigüedad: 14 años, 5 meses
Puntos: 1
Creo tenerte una posible solución

Recién calientita porque la acabé de encontrar

Por ejemplo si trabajas en PHP, hay una función bastante útil

ejemplo

Si ejecutas tu query suponiendo que $conexion ya está configurado con tu conexion a la BD tenemos;

// Corremos la inserción
$query = "INSERT INTO `tabla` (nombre,blabla) VALUES ('$nombre','$blabla')";
$result = mysql_query($query, $conexion);

//Ahora obtenemos el último id
$id_tabla = mysql_insert_id($dbConn);

Waala!! espero te sirva.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:32.