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

de repente mysqul_query() falla cuando siempre funcionaba bien

Estas en el tema de de repente mysqul_query() falla cuando siempre funcionaba bien en el foro de Mysql en Foros del Web. Hola, escribo porque tengo un problema urgente con una base de datos. Mi problema es el siguiente. Tengo una web en la que mediante mysql_query() ...
  #1 (permalink)  
Antiguo 15/09/2008, 04:20
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 20 años
Puntos: 8
de repente mysqul_query() falla cuando siempre funcionaba bien

Hola, escribo porque tengo un problema urgente con una base de datos.
Mi problema es el siguiente. Tengo una web en la que mediante mysql_query() y mysql_fetch_array() voy mostrando una serie de resultados. Esto siempre ha funcionado bien, el problema es que hoy de repente cuando refresco la pagina me arroja los siguiente errores:

Código:
Warning: mysql_query() [function.mysql-query]: Unable to save result set in /home/and1523/public_html/index.php on line 37

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/and1523/public_html/index.php on line 40

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/and1523/public_html/index.php on line 139
No he hecho ningun tipo de cambio en la web. La base de datos crece continuamente conforme los usuarios van metiendo contenido, y muy de vez en cuando se borra una fila. LLeva funcionando así correctamente y sin ningun tipo de problema desde hace 2 años, y tiene unas 11.200 filas.
He leido por ahi que este problema (que no he entendido a que se debe) se suele solucionar reparando la base de datos. Pues bien, lo he hecho varias veces, y luego he analizado, reparado y optimizado cada tabla de la base de datos por separado (tambien varias veces) y el problema persiste.
Tambien he notado, que los usuarios pueden seguir insertando informacion sin problemas, y que se puede visualizar si en vez de usar mysql_query() y mysql_fetch_array() uso mysql_query() y mysql_result() mostrando los resultados campo a campo.

Alguien tiene idea de a que se debe y de como lo puedo solucionar?
Me urge bastante.

Gracias de antemano.
Saludos.
  #2 (permalink)  
Antiguo 15/09/2008, 07:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: de repente mysqul_query() falla cuando siempre funcionaba bien

Primero deberías comprobar si el problema es de MySQL o de PHP. Me explico:
mysql_query() y mysql_fetch_array() y mysql_result() pertenecen a la API y no son SQL. No obstante, si quieres un consejo, primero deberías mostrarnos la consulta que lanzas con mysql_query, pues de ser un problema MySQL, probablemente, ya lo veríamos ahí. Si la consulta no obtiene algún resultado por error en la consulta, porque no encuentra nada o porque realmente no buscas nada (problemas con variables PHP), mysql_fetch_array también te daría problemas.
Pon la consulta aquí, o mejor, prueba primero la consulta que te da error en MySQL, en consola o por ej. en la pantalla SQL de PHPMyAdmin(si es que lo usas), sin variables, con datos concretos, y comprueba si obtienes o no resultados, y dinos, si da error, cuál es el error, además de mostrarnos la consulta.
  #3 (permalink)  
Antiguo 15/09/2008, 12:42
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 20 años
Puntos: 8
Respuesta: de repente mysqul_query() falla cuando siempre funcionaba bien

Hola,
ante todo gracias por tu respuesta.
Por partes; la consulta es correcta ya que se trata de un simple select con una sola condicion where. Ademas esta consulta lleva funcionando dos años y no ha cambiado en ningún momento.
Ahora bien, tu comentario me ha sugerido una idea de cual podria ser el problema y la verdad no se si es posible o es descabellado. Paso a comentarla:
la consulta basicamente es así:

select * from tabla1 where foto='s' order by id desc

Esta consulta me seleccionaria todas las filas que tengan el valor 's' en el campo foto y las ordenaria por id (entero que ademas es clave primaria) de mayor a menor.

Basicamente de todas esas filas yo quiero mostrar en la web solo las 15 ultimas (de ahi la ordenacion decreciente) entonces lanzo un bucle while donde la condicion es la instruccion mysql_fetch_array() y un contador. Sea porque mysql_fetch_array() devuelve false (porque no encuentra mas filas con la condicion) o porque el contador llega a 15, el bucle finaliza. Como tengo 11.000 filas y hay unas 8000 con foto, al final el bucle siempre finaliza porque se ha llegado a 15 en el contador.

Mi pregunta es la siguiente. puede ser que por hacer un select "tan grande" no haya suficiente memoria para ejecutarlo y por eso falle, o por el contrario la memoria se va usando a medida que va avanzando la funcion mysql_fetch_array(), en cuyo caso no existiria tal problema de memoria. No estoy diciendo que se coma la RAM del servidor pero igual las configuraciones de los servidores las hacen para que uno no pueda consumir mas de 30MB de RAM (por poner un ejemplo) y esa consulta esta requiriendo 32MB.
Sinceramente no tengo ni idea, pero mi pregunta es esa, si es posible que al hacer la consulta con el select intente ya reservar la memoria necesaria para contener todas las filas en RAM, y por falta de espacio falle.

Gracias otra vez.
Saludos.
  #4 (permalink)  
Antiguo 15/09/2008, 12:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: de repente mysqul_query() falla cuando siempre funcionaba bien

Esa es una pregunta que tendrán que responderte en el foro PHP, pero yo quisiera que me respondieses a esto:
¿por qué no usas limit 0,15?

o sea, creo que no necesitas ese bucle para nada si lo que quieres es sacar las 15 últimas:
select * from tabla1 where foto='s' order by id desc LIMIT 0,15
sería la consulta para traerte esas 15 últimas.
  #5 (permalink)  
Antiguo 15/09/2008, 13:06
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 20 años
Puntos: 8
Respuesta: de repente mysqul_query() falla cuando siempre funcionaba bien

y luego como las recupero? es decir hasta ahora, mysql_fetch_array() me devolvia un array que yo llamaba $fila y luego para mostrar los campos simplemente hacía lo siguiente en cada iteracion:

print($fila["nombre"]);
print($fila["apellido"]);

El problema es que si hago como tu dices, al tener 15 filas y no 1 cada vez ya no se como acceder a cada una de ellas. ¿Seria en forma de matriz?

En cualquier caso, volviendo al problema de la memoria. Cuando uno lanza la consulta SQL que he puesto antes, se almacena todo el resultado de la misma en RAM? y si no cabe falla? porque ese podria ser el problema, independientemente de usar php u otro lenguaje. Si ese fuese el problema seguramente la solucion llegase por limitar como me has comentado el resultado a 15, en cuyo caso ya investigaria como extraerlo con php.

Saludos.
  #6 (permalink)  
Antiguo 15/09/2008, 13:28
 
Fecha de Ingreso: abril-2004
Ubicación: Valencia
Mensajes: 436
Antigüedad: 20 años
Puntos: 8
Respuesta: de repente mysqul_query() falla cuando siempre funcionaba bien

Bien, todo funciona ya y estas son mis conclusiones:

seguramente como decía, si la memoria necesaria para contener la respuesta de la consulta es mayor que la memoria disponible en el servidor, falla. Este era mi caso.

Como tu has dicho con LIMIT 0,15 en la consulta he solucionado el problema ya que asi simplemente carga en memoria las 15 primeras filas respuesta de la consulta, con el consiguiente ahorro de RAM.

En cuanto a mysql_fetch_array() no he tenido que hacer ninguna modificacion, el funcionamiento es igual que con la otra consulta que tenia, es decir, metes las filas en un vector y mediante el bucle (sigue siendo necesario) se van mostrando los resultados de las 15 filas. La diferencia es que ya no hace falta tener un contador en el bucle ya que la misma funcion mysql_fetch_array() devuelve false cuando ya ha recorrido las 15 filas de la respuesta a la consulta.

Espero que haya quedado claro.
Ahora me doy cuenta de mi ignorancia, lanzando una consulta que recogia todas las filas, cuando en realidad solo necesitaba 15.

Gracias Jurena

Saludos.
  #7 (permalink)  
Antiguo 15/09/2008, 13:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: de repente mysqul_query() falla cuando siempre funcionaba bien

A ver, cuando cargas con limit 0,15, sólo cargas 15, no todos, por lo que no tendrás problemas de memoria (es recomendable, siempre que se pueda, limitar); sobre cómo trabajar con ello, eso se hace con un bucle while... míralo en los manuales de PHP y MySQL, y si tienes alguna duda pregunta en el foro PHP.
EDITO: ya he visto que te has dado cuenta de cómo va el proceso. Me alegro.

Saludos.
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 03:10.