Foros del Web » Programando para Internet » PHP »

Problema con mysql_insert_id()

Estas en el tema de Problema con mysql_insert_id() en el foro de PHP en Foros del Web. Hola, Veréis, tengo un problema con la función mysql_insert_id(). El caso, es que funciona bien, pero en varios casos he detectado, que no siempre guarda ...
  #1 (permalink)  
Antiguo 09/08/2013, 17:28
 
Fecha de Ingreso: abril-2011
Mensajes: 85
Antigüedad: 13 años
Puntos: 5
Problema con mysql_insert_id()

Hola,

Veréis, tengo un problema con la función mysql_insert_id(). El caso, es que funciona bien, pero en varios casos he detectado, que no siempre guarda bien el valor de la última ID en la base de datos. Es decir, en muchas ocasiones, lo hace de manera correcta, pero en algunas otras ocasiones, veo que el valor que me guarda es 0, por lo que no lo guarda bien.

¿A qué se puede deber esto? A veces funciona bien, y a veces no... el código a grandes rasgos es este:

Código PHP:
Ver original
  1. mysql_quer("   INSERT
  2.     INTO lugares
  3.         (
  4.              sitios,
  5.              localidades
  6.         )
  7.     VALUES
  8.         (
  9.             '$s',
  10.             '$a'
  11.     ");
  12.  
  13.     $id_last        = mysql_insert_id();

Es muy básico... posteriormente, lo inserto en otra base de datos, y así... no puedo entender, como es posible que a veces funcione y otras no. ¿Puede deberse al servidor? El error a largo plazo podría representar un error grave, espero que me podáis ayudar, muchas gracias chic@s!!!
  #2 (permalink)  
Antiguo 09/08/2013, 17:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema con mysql_insert_id()

Lo que pones es insuficiente pasa saber por qué falla. Podrían ser múltiples causas, pero yo soy partidario de empezar por verificar cada vez cuáles son los datos con que se producen las fallas, y que están en las variables.
La mayoría de las veces esos errores suceden porque las variables contienen datos que rompen la sintaxis del SQL, como por ejemplo, poner un apóstrofo ('), ya que eso interrumpiría la cadena dando lugar a un error de sintaxis.
Pero un paso previo sería que al menos capturaras el error que se produce... cosa que no estás haciendo.
Un simple caso de:
Código PHP:
Ver original
  1. $qry = "INSERT INTO lugares(sitios,localidades)  VALUES ('$s','$a')";
  2. $result = mysql_query($qry) or die("Error: ".mysql_error());
  3. if(result)
  4.      {$id_last = mysql_insert_id();}
al menos mostraría cuál es el error al momento de producirse.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/08/2013, 18:12
 
Fecha de Ingreso: abril-2011
Mensajes: 85
Antigüedad: 13 años
Puntos: 5
Respuesta: Problema con mysql_insert_id()

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo que pones es insuficiente pasa saber por qué falla. Podrían ser múltiples causas, pero yo soy partidario de empezar por verificar cada vez cuáles son los datos con que se producen las fallas, y que están en las variables.
La mayoría de las veces esos errores suceden porque las variables contienen datos que rompen la sintaxis del SQL, como por ejemplo, poner un apóstrofo ('), ya que eso interrumpiría la cadena dando lugar a un error de sintaxis.
Pero un paso previo sería que al menos capturaras el error que se produce... cosa que no estás haciendo.
Un simple caso de:
Código PHP:
Ver original
  1. $qry = "INSERT INTO lugares(sitios,localidades)  VALUES ('$s','$a')";
  2. $result = mysql_query($qry) or die("Error: ".mysql_error());
  3. if(result)
  4.      {$id_last = mysql_insert_id();}
al menos mostraría cuál es el error al momento de producirse.
Gracias por la respuesta, no obstante debo añadir que en local parece funcionar correctamente. Sólo se produce el error en el servidor.

También debo decir, que he probado ya eso que me has comentado, de "matar" la ejecución en cuanto haya un error, pero sin éxito, ya que en local parece que lo hace correctamente, es muy raro.

He buscado en el código para ver si había errores de sintáxis, y sin éxito, todo parece correcto. Sin embargo, me gustaría añadir, que en varias ocasiones utilizo la función mysql_insert_id(); dentro de la función ejectura. Evidentemente, todo separado en variables diferentes, puede tener algo que ver?

Gracias.
  #4 (permalink)  
Antiguo 10/08/2013, 08:17
 
Fecha de Ingreso: abril-2011
Mensajes: 85
Antigüedad: 13 años
Puntos: 5
Respuesta: Problema con mysql_insert_id()

¿A nadie mas se le ocurre qué puede pasar? Gracias!
  #5 (permalink)  
Antiguo 10/08/2013, 16:22
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 10 años, 11 meses
Puntos: 1
Respuesta: Problema con mysql_insert_id()

por favor una vez solucionado tu problema actualizate la extencion Mysql es considerada obsoleta fue reemplazada por Mysqli.

http://www.forosdelweb.com/f18/anunc...oleta-1008145/
  #6 (permalink)  
Antiguo 10/08/2013, 18:07
 
Fecha de Ingreso: abril-2011
Mensajes: 85
Antigüedad: 13 años
Puntos: 5
Respuesta: Problema con mysql_insert_id()

Cita:
Iniciado por rocha7778 Ver Mensaje
por favor una vez solucionado tu problema actualizate la extencion Mysql es considerada obsoleta fue reemplazada por Mysqli.

http://www.forosdelweb.com/f18/anunc...oleta-1008145/
Soy consciente de la depreciación que ha habido con la actual extensión de MySql, sin embargo debo decir, que es un proyecto demasiado complejo como para poder realizar una migración a corto plazo. Debemos solucionar muchos temas, y en concreto este no nos corre prisa, no obstante ya lo tenemos contemplado a largo plazo. Gracias por el interés, pero estoy seguro que el problema no viene de aquí.
  #7 (permalink)  
Antiguo 10/08/2013, 20:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema con mysql_insert_id()

Cita:
Iniciado por ivimendoza Ver Mensaje
Gracias por la respuesta, no obstante debo añadir que en local parece funcionar correctamente. Sólo se produce el error en el servidor.
Si hay errores de lógica, fallará en cualquier caso. Si los errores son sólo en un determinado contexto, hay que comparar ambos servidores para determinar qué diferencias pueden ser causantes de comportamientos distintos.
¿Revisaste algo?

Cita:
Iniciado por ivimendoza Ver Mensaje
También debo decir, que he probado ya eso que me has comentado, de "matar" la ejecución en cuanto haya un error, pero sin éxito, ya que en local parece que lo hace correctamente, es muy raro.
Yo en ningún momento hable de "matar" un proceso, sino de capturar el error. Son conceptos completamente distintos.
La idea de ese código (que puedes encontrar en cualquier manual básico de PHP con MySQL), es que te muestre en pantalla el mensaje de error que MySQL pueda estar devolviendo, en caso de ser ese el problema.
También te dije que había que revisar el contenido de las variables, es decir los datos que se ingresan a mano en el formulario y que se usan para crear la sentencia.
¿Lo hiciste?
No, seguro que no.
Por lo menos intenta hacer las pruebas que te propongo.
Cita:
Iniciado por ivimendoza Ver Mensaje
He buscado en el código para ver si había errores de sintáxis, y sin éxito, todo parece correcto.
Si buscaste errores de PHP, puede que no existan, pero eso no significa qu eno existan en el SQL.
Si buscaste errores en el SQL, habrás notado que no existen desde el punto de vista sintáctico, pero como ya te dije, eso no quiere decir que no se estén provocando por los datos entrantes, si no están bien controlados los contenidos de las variables (cosa que no se ve porque no posteaste código suficiente para saberlo).
Como para que este detalle te quede claro, veamos un ejemplo con datos, de tu propia consulta.
Esto está perfectamente cosntruido en MySQL:
Código MySQL:
Ver original
  1. INSERT INTO lugares(sitios,localidades)  VALUES ('Río Negro','Lago Puelo');
Pero si incorporo un texto que contenga algo que altere la sintaxis, el resultado es catastrófico:
Código MySQL:
Ver original
  1. INSERT INTO lugares(sitios,localidades)  VALUES ('paris','D'alembert');
Para que funcione, debo escapar los caracteres de ese tipo:
Código MySQL:
Ver original
  1. INSERT INTO lugares(sitios,localidades)  VALUES ('paris','D\'alembert');
¿Se entiende?

En definitiva, sintácticamente, tanto en PHP como en MySQL, estaría todo perfecto, pero... el usuario termina poniendo manualmente cosas que destruyen la consulta. Y este es un error muy, pero muy común.
Y no es un error que puedas detectar mirando código...

Cita:
Iniciado por ivimendoza Ver Mensaje
Sin embargo, me gustaría añadir, que en varias ocasiones utilizo la función mysql_insert_id(); dentro de la función ejectura. Evidentemente, todo separado en variables diferentes, puede tener algo que ver?
La función mysql_insert_id() tiene sentido y valor si y sólo si se ha realizado un INSERT exitoso sobre una tabla que tenga un campo autoincremental, y sólo para ser ejecutada inmediatamente de generar el INSERT. Fuera de ese contexto, la función no tiene ninguna utilidad.
De hecho, si luego del INSERT ejecutas otra sentencia, el valor de esa función vuelve a cero, por lo que se vuelve inútil.
Esto último sucede porque esa función lo que hace es leer el resultado de una función propia de MySQL denominada LAST_INSERT_ID(), la cual sólo funciona en las condiciones que te menciono.

Finalmente, hay un tema importante a resolver: Si las pruebas en PC local las estás haciendo en un servidor instalado en Windows (no importa la versión), pero el servidor productivo está operando sobre Linux, pueden existir comportamientos conflictivos, entre otras cosas porque Linux diferencia entre mayúsculas y minúsculas en los nombres de los objetos, con lo que una tabla denominada "Usuarios" y otra "uSUarios", para MySQL sobre Linux, son tablas diferentes.
¿Se entiende?
Ese mismo comportamiento afecta los nombres de las columnas, algunas funciones y todas las rutinas almacenadas (procedures, functions y trigers). En caso de existir ese tipo de situación, MySQL respondería con un error por columna o tabla desconocida, pero si no estás capturando los errores de MySQL, no te enterarás jamás.

Ten presente eso, y por favor, vuelve a analizar el problema, haciendo las pruebas que se te piden, y posteando los resultados.
Si no hay feed-back completo, es difícil ayudar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/08/2013 a las 20:28

Etiquetas: mysql
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 12:17.