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

Fallo... a veces

Estas en el tema de Fallo... a veces en el foro de Mysql en Foros del Web. Hola. Tengo una BBDD MySQL que manejo desde PHP. Tengo una consulta como la siguiente: $consulta = "UPDATE tabla_de_tareas SET tarea_realizada='S' WHERE id='".$id."';"; $hacerConsulta = ...
  #1 (permalink)  
Antiguo 03/09/2012, 01:44
 
Fecha de Ingreso: septiembre-2012
Mensajes: 16
Antigüedad: 11 años, 8 meses
Puntos: 0
Fallo... a veces

Hola.

Tengo una BBDD MySQL que manejo desde PHP. Tengo una consulta como la siguiente:

$consulta = "UPDATE tabla_de_tareas SET tarea_realizada='S' WHERE id='".$id."';";
$hacerConsulta = mysql_query($consulta, $conexion);
@mysql_free_result ($hacerConsulta);

La variable $conexion está definida más arriba en el listado. Por aho no hay problemas.

El problema es que no ejecuta la consulta, no cambia el valor del campo tarea_realizada. Sin embargo, le pongo un testigo, como aparece a continuación y no me da ningún error, así;

$consulta = "UPDATE tabla_de_tareas SET tarea_realizada='S' WHERE id='".$id."';";
$hacerConsulta = mysql_query($consulta, $conexion);
echo mysql_errno()." *** ".mysql_error()."<br />";
@mysql_free_result ($hacerConsulta);

Hago esto para ver que fallo hay, y el número de error es 0, es decir, no hay error.
Lo grave es que, a continuación, rescato el resultado, así;

$consulta = "SELECT tarea_realizada FROM tabla_de_tareas WHERE id='".$id."';";
$hacerConsulta = mysql_query($consulta, $conexion);
echo $consulta."<br />";
echo mysql_errno()." *** ".mysql_error()."<br />";
echo mysql_result($hacerConsulta, 0, "tarea_realizada")."<br />";
@mysql_free_result ($hacerConsulta);

y me muestra el resultado esperado, es decir, S.

Sin embargo, a continuación abro phpMyAdmin, miro la tabla, y conserva el valor N.

Es decir, no cambia el valor (a pesar de no dar ningún error), me dice que lo ha cambiado, mostrando el valor S, y luego resulta que NO lo ha cambiado. La tabla no se maneja en ninguna otra parte del script, con lo cual no es posible que se restaure el valor N original.

El campo es de tipo ENUM y admite los valores S y N.

Lo más grave es que lo pruebo varias veces seguidas y de vez en cuando SI cambia el valor, pero no cada x veces fijo, sino de forma aleatoria.

A Alguien le ha pasado alguna vez algo imposible como esto???

  #2 (permalink)  
Antiguo 03/09/2012, 05:13
Avatar de antoniopol  
Fecha de Ingreso: agosto-2012
Ubicación: Valladolid
Mensajes: 114
Antigüedad: 11 años, 8 meses
Puntos: 21
Respuesta: Fallo... a veces

Y te has asegurado que $id tiene valor?? deberías probar con echo $id y $consulta para asber cuando funciona, por que seguramente $id no tenga valor y no actualice la tabla correctamente.
__________________
>> Blog de desarrollo web.
>> @antoniopol06 amante de la Web =D
  #3 (permalink)  
Antiguo 03/09/2012, 07:51
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: Fallo... a veces

Código MySQL:
Ver original
  1. UPDATE tabla_de_tareas
  2. SET tarea_realizada='S'
  3. WHERE id='".$id."';

Esto no contiene ningún error, por lo que no debería fallar.
Ahora bien, como bien te dijo antoniopol, es una consulta dependiente del valor que llegue en esa variable de PHP, por lo que si la variable llega nula o conteniendo vacío, o un valor inexistente, simplemente no hará nada.
Empieza verificando lo que realmente llega, no lo que sabes que debe llegar (son cosas distitnas).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/09/2012, 09:29
 
Fecha de Ingreso: septiembre-2012
Mensajes: 16
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Fallo... a veces

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. UPDATE tabla_de_tareas
  2. SET tarea_realizada='S'
  3. WHERE id='".$id."';

Esto no contiene ningún error, por lo que no debería fallar.
Ahora bien, como bien te dijo antoniopol, es una consulta dependiente del valor que llegue en esa variable de PHP, por lo que si la variable llega nula o conteniendo vacío, o un valor inexistente, simplemente no hará nada.
Empieza verificando lo que realmente llega, no lo que sabes que debe llegar (son cosas distitnas).
Gracias a los dos. Sí, se que parece lo más obvio pero, por supuesto, me he asegurado de eso antes de postear. El valor de $id llega correctamente. De hecho, puse también un testigo para mostrar la consulta, tal como debería quedar, y queda como esperaba. Sea lo que sea que está pasando, no es tan obvio. Es algo con lo que no me habia encontrado nunca. De hecho, el script maneja otras tablas de la BBDD y no se peoduce ese fallo. Es algo mucho más sutil, yo no he sido capaz de verlo.
Ah, por supuesto, si existe el registro que tiene el id que llega en la variable. Tampoco es ese el problema. Además, si fuera eso, MySQL generaria un error, y no lo hace.

A todo esto, estoy haciendo las pruebas en modo local, con el WAMP instalado. No creo que eso tenga nada que ver, pq todo lo demás lo estoy probando con el mismo entorno, y este fallo SOLO se produce en esa consulta a esa tabla en concreto, y ni siquiera todas las veces, sino de forma aparentemente aleatoria.
  #5 (permalink)  
Antiguo 03/09/2012, 10:40
Usuario no validado
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años
Puntos: 16
Respuesta: Fallo... a veces

Te sugiero hacer que se muestre el comando SQL en pantalla.

Código PHP:
Ver original
  1. $qry = '[comando]';
  2. echo $qry;

Tendrías que evaluar si no estás ejecutando alguna otra cosa después de ese comando.

Y de paso, en caso de que tengas triggers involucrados, pues echales un ojo a ver si no has dejado un pedazo de código mal puesto por ahí.

Saludos,
  #6 (permalink)  
Antiguo 06/09/2012, 07:39
 
Fecha de Ingreso: septiembre-2012
Mensajes: 16
Antigüedad: 11 años, 8 meses
Puntos: 0
Exclamación Respuesta: Fallo... a veces

SOLUCIONADO (???).

Es un efecto inesperado por tener un valor predeterminado en un campo de tipo ENUM. Le he quitado el valor predeterminado y el problema se ha resuelto. No debería de ser así, ya que el valor predeterminado solo debería actuar mientras no se introduzca otro valor. En el resto de las tablas de la BBDD no me ocurre esto, así que aún no sé por qué se produce en esta en concreto, pero el caso es que quitandole ese valor, todo funciona ok.

A veces ocurren cosas así, que no deberían ocurrir.
  #7 (permalink)  
Antiguo 06/09/2012, 08:15
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: Fallo... a veces

Cita:
Es un efecto inesperado por tener un valor predeterminado en un campo de tipo ENUM. Le he quitado el valor predeterminado y el problema se ha resuelto. No debería de ser así, ya que el valor predeterminado solo debería actuar mientras no se introduzca otro valor.
En MySQL, los campos de tipo ENUM tienen su valor por defecto ya predefinido por el tipo de dato: Es el primer valor de la enumeración.
De todos modos, habría que ver qué es lo que estabas tratando de poner, y cómo estaba definida esa enumeración, para ver por qué se generó el problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: fallo, php, select, sql, tabla, tipo, veces, campos
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 11:25.