Foros del Web » Programando para Internet » PHP »

Dond debe ir el mysql_free_result

Estas en el tema de Dond debe ir el mysql_free_result en el foro de PHP en Foros del Web. Buenas Noches amigos, Tengo un problema con mysql_free_result(); Estoy desarrollando una aplicacion en php que se conecta con una base de datos en mysql, en ...
  #1 (permalink)  
Antiguo 12/09/2011, 20:39
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Dond debe ir el mysql_free_result

Buenas Noches amigos,

Tengo un problema con mysql_free_result();

Estoy desarrollando una aplicacion en php que se conecta con una base de datos en mysql, en un servidor de mi trabajo.

La base de datos es de solo consulta, y solo tengo un limite de 5 consultas, si no se liberan entonces se bloquea mostrando el siguiente error:

Código PHP:
Warningmysql_connect() [function.mysql-connect]: User 'mydata' has exceeded the 'max_user_connections' resource (current value5
Como debo usar el mysql_free_result? yo al final estoy usando el mysql_close($link);

Como puedo liberar la consulta cuando me salga ese mensaje de has exceeded the 'max_user_connections' resource (current value: 5) ????

Código PHP:

    
<?
include("conexion.php"); 
$link=Conectarse(); 
?>

<?
$fecho
=mysql_query("SELECT fecha FROM calculos ORDER BY fecha DESC LIMIT 1");
$filo=mysql_fetch_array($fecho);

$fecha1=$filo[fecha];
$fecha2 date("Y-m-d H:i",strtotime($fecha1."-2 hour"));
$fecha2 $fecha2.":00";

mysql_free_result($fecho);

?>
        


<?
$buscar
=mysql_query("SELECT datos, fecha WHERE fecha BETWEEN ('$fecha2' AND '$fecha1') ");
mysql_free_result($buscar);
$i=0;
while(
$filasmysql_fetch_array($buscar))
{
$nombre=$filas[nombre];



$consulta=mysql_query("SELECT DISTINCT nombre,precio FROM bts_info WHERE tipo='1' and nombre='$nombre' ");

mysql_free_result($consulta);

while(
$filamysql_fetch_array($consulta))
{

?>
muestro los datos
          <?
    
}
    
mysql_free_result($buscar);
    }
    
mysql_free_result($consulta);
    
mysql_close($link);
    
?>
Ayuda,
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #2 (permalink)  
Antiguo 12/09/2011, 21:23
Avatar de ZoroRoronoa  
Fecha de Ingreso: marzo-2011
Ubicación: California, USA
Mensajes: 824
Antigüedad: 13 años
Puntos: 116
Respuesta: Dond debe ir el mysql_free_result

ponlo una vez hallas hecho uso de los valores extraidos.

Por ejemplo:

AQUI CONSULTAS

AQUI ASIGNAS CONSULTA(VALOR) A UNA VARIABLE

//***COMO LA VARIABLE YA GUARDA DICHO DATO YA PUEDES LIBERAR LOS RESULTADOS

PONES EL MYSQL FREE RESULT

((( Y YA PUEDES IMPRIMIR TU VARIABLE CON DICHO VALOR. !!!!!! no importa que no lo imprimas
((( ya tu sabes que haras con los valores extraidos ..

Saludos.
Espero me hayas entendido (:
__________________
Programador jQuery & PHP
  #3 (permalink)  
Antiguo 12/09/2011, 23:19
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Dond debe ir el mysql_free_result

Se llama en el momento que desees liberar la memoria de una consulta con conjuntos de resultados muy grandes. De todas formas no es necesario liberar la memoria si la consulta no cumple con esta característica, ya que el recolector de basuras de PHP lo hace al finalizar la ejecución del script automácticamente.

Según tu error el usuario mydata, ha alcanzado el límite de conexiones permitidas y necesitas aumentar ese límite. Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #4 (permalink)  
Antiguo 13/09/2011, 07:45
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Dond debe ir el mysql_free_result

Código PHP:
Ver original
  1. Warning: mysql_connect() [function.mysql-connect]: User 'mydata' has exceeded the 'max_user_connections' resource (current value: 5)

Haber si leemos un poco los errores antes de preguntar, El error no es que estas llamando mal a la instruccion mysql_free, el problema es que has excedido el numero de conexiones simultaneas que se le puede hacer a esa bd en particular, te sugiero que chequees cuantas aplicaciones acceden a ella y de necesitarlo aumentar ese numero de conexiones...

si estas usando un servidor wamp, edita el arcivo .ini, y si estas usando el programa neto de mysql (mysqlserver x.x) edites el numero de usuarios q se pueden conectar...

y el free yo suelo ponerlo al final de la pagina despues de </body>

aunque lo que dijo el amigo esta bien, si capturas los datos de un a consulta en una variable, puedes colocarlo inmediatamente despues que guardes los datos en la variable, puesto estos no se perderan...

suerte.!
  #5 (permalink)  
Antiguo 13/09/2011, 09:47
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Dond debe ir el mysql_free_result

Muchas gracias a todos amigos,

Pero no se que estare haciendo mal que me sigue apareciendo el error, solo me habilitaron 5 consultas, cada vez que genero mi reporte se bloquea el usuario nuevamente :S

Por eso mi duda es, donde debe ir el mysql_free_result cuando son varias consultas y unas depende de la anterior como el ejemplo del codigo que coloque arriba.
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #6 (permalink)  
Antiguo 13/09/2011, 10:29
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Dond debe ir el mysql_free_result

Cita:
Iniciado por andresdzphp Ver Mensaje
Se llama en el momento que desees liberar la memoria de una consulta con conjuntos de resultados muy grandes. De todas formas no es necesario liberar la memoria si la consulta no cumple con esta característica, ya que el recolector de basuras de PHP lo hace al finalizar la ejecución del script automácticamente.
al menos que tus consultas sean bastante grandes el php suele hacer eso el solo aunq si lo quieres hacer hazlo justo despues de finalizar cada consulta es decir:
-REALIZAS LA CONSULTA
-CAPTURAS LOS RESUTLADOS EN VARIABLES PHP ($var=$_POST['campo'];)
-APLICAS EL MYSQL_FREE
  #7 (permalink)  
Antiguo 13/09/2011, 10:39
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Dond debe ir el mysql_free_result

Gracias amigo,

Pero esque es una sentencia while :s al finalizar esa consulta es que debo cerrarla.

Código PHP:
Ver original
  1. $buscar=mysql_query()
  2. while($fila= mysql_fetch_array())
  3. {
  4. muestro los datos
  5. }

No puedo colocar el mysql_free_result luego de la consulta porque solo me traeria un registro y por eso uso el while para que me muetre todos los registros de mi consulta.

Y aun asi me sigue salindo el error porque no se cierra la consulta bien :S
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #8 (permalink)  
Antiguo 13/09/2011, 10:51
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Dond debe ir el mysql_free_result

ve probando por partes a ver donde esta el problema

1.- haz una consulta con limit de 4 por ejemplo

2.- haz la consulta normal pero solo llama un campo sin while

nose que mas por los momentos
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #9 (permalink)  
Antiguo 13/09/2011, 10:53
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 14 años, 8 meses
Puntos: 19
Respuesta: Dond debe ir el mysql_free_result

bueno si el error te sale en esa linea son las consultas anteriores que has hecho q no se han cerrado... prueba tambuien lo que dijo JOHHAN16
  #10 (permalink)  
Antiguo 13/09/2011, 19:05
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Dond debe ir el mysql_free_result

Hola amigos,

Con las consultas sin el while no tengo problema porque como solo hace una consulta y luego la libero.

Sin embargo con los while si me pasa el error, con las 5 consultas que tengo disponible, es decir, al generar la consulta me sale el error de que excedi el maximo de consultas :S

Yo necesito usar el while porque quiero ver todos los registros en la tabla que cumplan con ciertos parametros.
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #11 (permalink)  
Antiguo 13/09/2011, 21:20
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: Dond debe ir el mysql_free_result

Cita:
al generar la consulta me sale el error de que excedi el maximo de consultas :S
Si eso es lo que te devuelve MySQL, el problema no lo resolverás con mysql_free_result(), porque lo que tienes no es una falta de recursos, sino que has excedido los límites de tus permisos de usuario.
Ocasionalmente, se da permisos a un usuario para hacer un máximo de cierto número de consultas/hora. Si lo excedes, simplemente no podrás hacer nada hasta que no haya pasado una hora.
Esa es una de las razones por las que hacer consultas en un while se considera una pésima práctica, desde el punto de vista de las bases de datos y su performance. Antes bien es mejor crear una consulta tal que te traiga todo lo que lograrías haciendo el while.
__________________
¿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 13/09/2011, 22:36
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Dond debe ir el mysql_free_result

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si eso es lo que te devuelve MySQL, el problema no lo resolverás con mysql_free_result(), porque lo que tienes no es una falta de recursos, sino que has excedido los límites de tus permisos de usuario.
Ocasionalmente, se da permisos a un usuario para hacer un máximo de cierto número de consultas/hora. Si lo excedes, simplemente no podrás hacer nada hasta que no haya pasado una hora.
Esa es una de las razones por las que hacer consultas en un while se considera una pésima práctica, desde el punto de vista de las bases de datos y su performance. Antes bien es mejor crear una consulta tal que te traiga todo lo que lograrías haciendo el while.
A ok ya entiendo hermano, bueno te cuento que hoy realize la consulta con el while y la cerro sin problema, el mensaje no aparecio mas.

Sin embargo le di la ip a varios companeros del trabajo para que al mismo tiempo manipularan la aplicacion y ver que pasaba, y pues luego de unos minutos en los que todos estaban generando consultas al mismo tiempo, me volvio aparecer el mensaje de que excedi las 5 consultas disponibles.

Como me comentas que while es una pesima practica para las cosultas que me propones amigo? que podria utilizar que no se el while?

Gracias,
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04

Etiquetas: mysql, sql
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 13:27.