Ver Mensaje Individual
  #7 (permalink)  
Antiguo 10/08/2013, 20:19
Avatar de gnzsoloyo
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