Foros del Web » Programando para Internet » PHP »

Problema muy extraño al actualizar base de datos

Estas en el tema de Problema muy extraño al actualizar base de datos en el foro de PHP en Foros del Web. Buenas noches, La verdad no se donde poner este tema, porque sinceramente no se a que categoria pertenece, pero espero puedan guiarme a una respuesta ...
  #1 (permalink)  
Antiguo 14/02/2010, 16:16
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Problema muy extraño al actualizar base de datos

Buenas noches,

La verdad no se donde poner este tema, porque sinceramente no se a que categoria pertenece, pero espero puedan guiarme a una respuesta a este problema muy raro.

Les cuento, tengo una Web hecha para gestionar puntajes para un juego. Lo tenia en un host gratuito, y funcionaba bien (aunque lento, como en la mayoria de los host gratuitos, pero no viene al caso).
La cosa es que ahora tengo un hosting pago, y pase la Web ahi, por razones obvias (de funcionamiento en general), pero ahora me surgio un problema, el cual es el siguiente:

Cuando tengo que actualizar los puntajes, en total son 111 Inserts que hago a la Base de datos, pero al llegar a una cierta cantidad de insersiones, las mismas no se hacen, los valores son vacios (o los q estan por defecto en la Bd) y no entiendi porque pasa!! Si en la otra web anda bien, porque en esta no?

Miren, adjunto una foto de la Base de datos, como algunos se guardan bien, y otros con valores vacios (o ceros, el valor por defecto de las columnas numericas).



En resumen: Al realizar una cierta cantidad de INSERTS, los mismos no se hacen con los valores adecuados, es como que la asignacion de los mismos no sea la correcta apartir de X insercion.

A alguien le paso esto y puede ayudarme? Estare super agradecido.
Cualquier informacion que necesiten pidamenla por favor, la verdad nisiquiera se como encarar un problema que nunca me habia ocurrido.

Saludos.
  #2 (permalink)  
Antiguo 14/02/2010, 16:18
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Problema muy extraño al actualizar base de datos

la precisión de los capos double puede jugarte malas pasadas, revisa la configuración de los campos y amplia su rango de precisión
  #3 (permalink)  
Antiguo 14/02/2010, 16:20
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Pero no tengo ningun campo de tipo double, son todos tinyint, porque los puntajes nunca son tan altos como para usar un tipo de campo mayor. La ID es de tipo smallint, porque son muchos los jugadores agregados al sistema.

Muchas gracias por tu respuesta!
  #4 (permalink)  
Antiguo 14/02/2010, 16:33
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Problema muy extraño al actualizar base de datos

te recomiendo usar INT para los campos ID

verifica que los campos de los resultados sean signed o unsigned según tus necesidades
  #5 (permalink)  
Antiguo 14/02/2010, 16:46
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Eso esta todo controlado, pero siento q no tiene nada que ver, pq los valores se guardan correctamente para las primeras inserciones, eso lo podes ver claramente en la base de datos. Le cambie a INT el tipo de datos de la ID, pero no surtio efecto.
  #6 (permalink)  
Antiguo 14/02/2010, 17:34
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Problema muy extraño al actualizar base de datos

Pues si sabes que no es problema de la bd, no pongas captura, sino código fuente php que tengas hecho. Sino vamos a barajar cien mil hipótesis y probablemente es una chorrada. A mí también me pasó de cambiar de hosting y tener que modificar el código para que funcionase acorde a las nuevas características. No es tan raro...
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #7 (permalink)  
Antiguo 14/02/2010, 17:47
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Mira el codigo es este, funciona con las primeras inserciones, pero luego deja de funcionar. En la otra web funciona perfecto...

Código PHP:
$sql "SELECT * from `puntaje` WHERE `fecha` = '$id_fecha'";
            
$result mysql_query($sql);
            while(
$row mysql_fetch_object($result)){
                
//Tomo el resto de las variables
                
$jugo $_POST["jugo".$row->id];
                
$jugo mysql_real_escape_string($jugo);
                
$ptoclarin $_POST["ptoclarin".$row->id];
                
$ptoclarin mysql_real_escape_string($ptoclarin);
                if(
$ptoclarin == ""$ptoclarin 0;
                
$golaf $_POST["golaf".$row->id];
                
$golaf mysql_real_escape_string($golaf);
                if(
$golaf == ""$golaf 0;
                
$golec $_POST["golec".$row->id];
                
$golec mysql_real_escape_string($golec);
                if(
$golec == ""$golec 0;
                
$golrec $_POST["golrec".$row->id];
                
$golrec mysql_real_escape_string($golrec);
                if(
$golrec == ""$golrec 0;
                
$penalc $_POST["penalc".$row->id];
                
$penalc mysql_real_escape_string($penalc);
                if(
$penalc == ""$penalc 0;
                
$penala $_POST["penala".$row->id];
                
$penala mysql_real_escape_string($penala);
                if(
$penala == ""$penala 0;
                
$penale $_POST["penale".$row->id];
                
$penale mysql_real_escape_string($penale);
                if(
$penale == ""$penale 0;
                
$valla $_POST["valla".$row->id];
                
$valla mysql_real_escape_string($valla);
                if(
$valla == ""$valla 0;
                
$amarilla $_POST["amarilla".$row->id];
                
$amarilla mysql_real_escape_string($amarilla);
                if(
$amarilla == ""$amarilla 0;
                
$roja $_POST["roja".$row->id];
                
$roja mysql_real_escape_string($roja);
                if(
$roja == ""$roja 0;
                
$figura $_POST["figura".$row->id];
                
$figura mysql_real_escape_string($figura);
                if(
$figura == ""$figura 0;
                
$total $_POST["total".$row->id];
                
$total mysql_real_escape_string($total);

                
//Lanzo la consulta
                
$sql2 "UPDATE `puntaje` SET `jugo`='$jugo', `ptoclarin`='$ptoclarin', `golaf`='$golaf', `golec`='$golec', `golrec`='$golrec', `penalc`='$penalc', `penala`='$penala', `penale`='$penale', `valla`='$valla', `amarilla`='$amarilla', `roja`='$roja', `figura`='$figura', `total`='$total' WHERE `id`='$row->id' ";
                
$result_consulta mysql_query($sql2);
            } 
Cualquier otra cosa mas que necesites pedimelo que con gusto te lo brindo.

Saludos.
  #8 (permalink)  
Antiguo 14/02/2010, 18:06
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Problema muy extraño al actualizar base de datos

Estamos hablando de campos numéricos, que pones todos con comillas, y tampoco entendí nunca muy bien para qué esas tildes invertidas de los campos. Prueba con la sentencia así:

Código PHP:
Ver original
  1. $sql2 = "UPDATE puntaje SET jugo=".$jugo.", ptoclarin=".$ptoclarin.", golaf=".$golaf." .... etc etc .....  WHERE id=".$row->id;

Además si aquí:
Código PHP:
Ver original
  1. $result_consulta = mysql_query($sql2);
Lo pones así:
Código PHP:
Ver original
  1. $result_consulta = mysql_query($sql2) or die ("error del servidor: ". mysql_error());
Sabrás de qué se trata el error.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #9 (permalink)  
Antiguo 14/02/2010, 18:45
 
Fecha de Ingreso: enero-2010
Mensajes: 152
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Problema muy extraño al actualizar base de datos

si quieres sinceridad... creo que tienes un problema de timeout en ese script.

Dices que son muchos jugadores, por lo tanto es posible que estés alcanzando el límite de tiempo de ejecución de tu script.
  #10 (permalink)  
Antiguo 14/02/2010, 19:35
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Problema muy extraño al actualizar base de datos

Para ello, el die que mostrará el error de mysql y sabremos exactamente de qué se trata. Aunque hasta que responda el usuario no podemos saber nada.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #11 (permalink)  
Antiguo 14/02/2010, 19:49
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, 4 meses
Puntos: 2658
Respuesta: Problema muy extraño al actualizar base de datos

Aclarando el tema de las "tildes invertidas" (en realidad son acentos graves, poco usuales en castellano)
CHuLoSoY: Los acentos graves (`) se usan en SQL para encerrar los nombres de bases, tablas, campos, procedimientos, funciones, triggers y en general todo objeto de una base de datos. Este símbolo no es obligatorio en todos los casos, sino cuando:
- El nombre de ese objeto contiene caracteres especiales (¨.,;:-¿?= /&%$·") o espacios, y por alguna razón no es posible modificarlo.
- Se está usando una palabra reservada, caso en el cual puede generarse un conflicto de parser (por ejemplo, cuando se usa PASSWORD, DATA, DATE, etc.).

Si no se da ninguna de las dos situaciones, el caracter es opcional.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 14/02/2010, 22:08
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Problema muy extraño al actualizar base de datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Aclarando el tema de las "tildes invertidas" (en realidad son acentos graves, poco usuales en castellano)
CHuLoSoY: Los acentos graves (`) se usan en SQL para encerrar los nombres de bases, tablas, campos, procedimientos, funciones, triggers y en general todo objeto de una base de datos. Este símbolo no es obligatorio en todos los casos, sino cuando:
- El nombre de ese objeto contiene caracteres especiales (¨.,;:-¿?= /&%$·") o espacios, y por alguna razón no es posible modificarlo.
- Se está usando una palabra reservada, caso en el cual puede generarse un conflicto de parser (por ejemplo, cuando se usa PASSWORD, DATA, DATE, etc.).

Si no se da ninguna de las dos situaciones, el caracter es opcional.
Wow gracias! Como bien dije, nunca lo había entendido..... hasta ahora :)
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #13 (permalink)  
Antiguo 15/02/2010, 02:56
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Buenos dias, la verdad anoche no pude volver a conectarme, pero pongo una actualizacion de lo que hice hasta ahora.

- Probe la solucion de CHuLoSoY, agregue el die al mysql_query y no obtuve resultados. Lo imaginaba desde el comienzo puesto que los 111 INSERTS (o en este caso que muestro el codigo de modificar puntajes, son UPDATES) se hacen, pero con valores nulos.
- Agregue un mysql_free_result por si acaso, dando los mismos resultados...

Yo opto por lo que dijo paynalton, algo ocurre con el tiempo del script, pero el vector $_POST no tiene algun limite en cuanto a su tamaño? Porque, repito, las operaciones en la BD las hace, pero los valores de las variables son vacias, a esto me refiero:

Código PHP:
$jugo $_POST["jugo".$row->id];
                
$jugo mysql_real_escape_string($jugo);
                
$ptoclarin $_POST["ptoclarin".$row->id];
                
$ptoclarin mysql_real_escape_string($ptoclarin);
                if(
$ptoclarin == ""$ptoclarin 0;
                
$golaf $_POST["golaf".$row->id];
                
$golaf mysql_real_escape_string($golaf);
                if(
$golaf == ""$golaf 0;
                
$golec $_POST["golec".$row->id];
                
$golec mysql_real_escape_string($golec);
                if(
$golec == ""$golec 0;
                
$golrec $_POST["golrec".$row->id];
                
$golrec mysql_real_escape_string($golrec);
                if(
$golrec == ""$golrec 0;
                
$penalc $_POST["penalc".$row->id];
                
$penalc mysql_real_escape_string($penalc);
                if(
$penalc == ""$penalc 0;
                
$penala $_POST["penala".$row->id];
                
$penala mysql_real_escape_string($penala);
                if(
$penala == ""$penala 0;
                
$penale $_POST["penale".$row->id];
                
$penale mysql_real_escape_string($penale);
                if(
$penale == ""$penale 0;
                
$valla $_POST["valla".$row->id];
                
$valla mysql_real_escape_string($valla);
                if(
$valla == ""$valla 0;
                
$amarilla $_POST["amarilla".$row->id];
                
$amarilla mysql_real_escape_string($amarilla);
                if(
$amarilla == ""$amarilla 0;
                
$roja $_POST["roja".$row->id];
                
$roja mysql_real_escape_string($roja);
                if(
$roja == ""$roja 0;
                
$figura $_POST["figura".$row->id];
                
$figura mysql_real_escape_string($figura);
                if(
$figura == ""$figura 0;
                
$total $_POST["total".$row->id];
                
$total mysql_real_escape_string($total); 
Si valen cero es porque con el if le asigno ese valor, de otro modo seguro se insertarian valores vacios (como el campo "jugo").
Yo siento que el vector $_POST tiene algun limite en cuanto a sus indices, lo mas extraño es que en el otro host si que funciona bien, y la verdad estoy muy mareado.

Agradezco mucho sus respuestas.

Saludos.
  #14 (permalink)  
Antiguo 15/02/2010, 03:27
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 16 años, 4 meses
Puntos: 16
Respuesta: Problema muy extraño al actualizar base de datos

creo que se refieren a max_execution_time o a memory_limit del php.ini o del conf
pero vamos, que si ha sido al cambio del servidor mira las versiones de php y mysql que tienes y tenías y la configuración de ellos y compara esos archivos.
suerte ;)
  #15 (permalink)  
Antiguo 15/02/2010, 03:30
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Gracias Vir!!! voy a tener en cuenta eso. De hecho ahora lo voy a mirar, pero es tan extraño....

Besos.
  #16 (permalink)  
Antiguo 15/02/2010, 05:06
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Problema muy extraño al actualizar base de datos

Una cosa que podrías intentar es hacer un Commit después de cada operación, porque podría ser que estés intentando hacer todas las operaciones en una sola transacción y por eso se hace demasiado voluminosa.
  #17 (permalink)  
Antiguo 15/02/2010, 05:28
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Y como hago eso que me decis? Las operaciones las hago en un bucle, son 111 veces que lo hace (una por jugador).

Saludos.
  #18 (permalink)  
Antiguo 15/02/2010, 15:17
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Levanto el tema porque estuve viendo las configuraciones de PHP de ambos servidores y miren esto:

En el servidor que si funciona el script:
max_execution_time: 10
max_input_time: 10
memory_limit 32M

En el servidor donde no funciona el script:
max_execution_time: 30
max_input_time: 60
memory_limit : 300M

No deberia ser al reves? =S

Saludos.
  #19 (permalink)  
Antiguo 15/02/2010, 15:31
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, 4 meses
Puntos: 2658
Respuesta: Problema muy extraño al actualizar base de datos

Deberías probar hacer un INSERT múltiple, creando una sentencia que agrupe varios bloques de valores, en lugar de X cantidad de sentencias INSERT separadas.
Es mucho más rápido porque usa un solo thread de ejecución en la base de datos por cada envío.

La idea es crear un conjunto que sea:
Código MySQL:
Ver original
  1. INSERT INTO TABLA(campos)
  2. VALUES(valores1), (valores1), (valores2), (valores3), (valores4), ..., (valoresN);
o bien
Código MySQL:
Ver original
  1. INSERT INTO TABLA
  2. VALUES(valores1), (valores1), (valores2), (valores3), (valores4), ..., (valoresN);
si no vas a discriminar los campos a ingresar.

El tema aquí es crear en una sola sentencia todos los conjuntos de registros a ingresar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 15/02/2010, 15:42
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Claro entiendo lo que me queres decir. Pero encontras alguna razon por la que el problema no funcione en un servidor y en otro si? Porque en la web alojada en el host gratuito funciona perfecto ... y llevabamos 1 año usandola. Ahora la migre identica....y no funciona eso.

Voy a probar lo que me comentas, cualquier cosa subo este post nuevamente. Gracias!

Saludos.
  #21 (permalink)  
Antiguo 17/02/2010, 14:04
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Problema muy extraño al actualizar base de datos

Bueno he estado investigando y, mas alla de no haber solucionado el problema, ya se que es lo que ocurre.

El problema esta radicado en el vector $_POST, el cual no guarda en su totalidad todos los indices que yo le paso (debe tener mas de 1000 indices).
En el servidor gratuito si que los guarda, y todo funciona perfecto. Pero en el servidor pago no, ustedes pueden decirme exactamente por que?

Nunca pense que me limitaran la capacidad de una variable, tiene algo que ver con la configuracion de PHP?

Por favor les pido su ayuda, estoy bastante preocupado por no poder solucionar esto.

Saludos.

Etiquetas: extraño
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 17:02.