Foros del Web » Programando para Internet » PHP »

unset al devolver un recordset

Estas en el tema de unset al devolver un recordset en el foro de PHP en Foros del Web. Hola a todos, tengo una funcion que devuelve un recordset con los valores obtenidos de una consulta a mysql. El caso es que si hago ...
  #1 (permalink)  
Antiguo 22/02/2010, 12:57
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 10 años, 2 meses
Puntos: 8
unset al devolver un recordset

Hola a todos, tengo una funcion que devuelve un recordset con los valores obtenidos de una consulta a mysql.

El caso es que si hago el unset de la variable recordset despues de devolverla creo que no la libera.
Es decir tengo esto:

return(var_rsValoresBD);
unset(var_rsValoresBD);


Y así devuelve bien los valores pero no ejecuta la siguiente linea al return, por eso no libera la memoria.

¿Como hago para poder devolver el recordset y luego liberarlo de la memoria?
  #2 (permalink)  
Antiguo 22/02/2010, 13:00
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 12 años
Puntos: 25
Respuesta: unset al devolver un recordset

mmmmmmmmm, podrias eliminarla donde en los trozos de código donde haces el llamado a la función, osea, luego de llamar a la función, vacias la variable...
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #3 (permalink)  
Antiguo 22/02/2010, 13:00
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: unset al devolver un recordset

Las lineas que esten por debajo del return van a ser ignoradas siempre!

Si esa variable es un resultado de una consulta a la base de datos, podrias usar mysql_free_result()
__________________
HV Studio
Diseño y desarrollo web
  #4 (permalink)  
Antiguo 22/02/2010, 13:09
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 10 años, 2 meses
Puntos: 8
Respuesta: unset al devolver un recordset

Cita:
Iniciado por jackson666 Ver Mensaje
Las lineas que esten por debajo del return van a ser ignoradas siempre!

Si esa variable es un resultado de una consulta a la base de datos, podrias usar mysql_free_result()
Y con
mysql_free_result(var_rsValoresBD);
despues del return sí que lo libera?

Si esta despues del return, aun así lo ejecuta?
Es que como dices que todo lo que este despues del return no se ejecuta entonces donde pongo el mysql_free_result????

Última edición por mdromed; 22/02/2010 a las 13:25
  #5 (permalink)  
Antiguo 22/02/2010, 13:30
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 10 años, 2 meses
Puntos: 8
Respuesta: unset al devolver un recordset

Cita:
Iniciado por hector2c Ver Mensaje
mmmmmmmmm, podrias eliminarla donde en los trozos de código donde haces el llamado a la función, osea, luego de llamar a la función, vacias la variable...
No puedo vaciar la variable local de una funcion si estoy fuera del ambito de esa funcion.
  #6 (permalink)  
Antiguo 22/02/2010, 13:31
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: unset al devolver un recordset

No, la idea era que hagas esto (no es lo mas recomendable, pero bueh...)

Ejemplo
Código PHP:
<?php

function algo(){
    global 
$param;
    
$param 1;
    return 
$param;
}

echo 
algo(); // imprime 1
echo $param// imprime 1

?>
Como veras, puedo acceder desde afuera del ambito de la funcion a la variable
__________________
HV Studio
Diseño y desarrollo web
  #7 (permalink)  
Antiguo 22/02/2010, 13:38
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 10 años, 2 meses
Puntos: 8
Respuesta: unset al devolver un recordset

Cita:
Iniciado por jackson666 Ver Mensaje
No, la idea era que hagas esto (no es lo mas recomendable, pero bueh...)

Ejemplo
Código PHP:
<?php

function algo(){
    global 
$param;
    
$param 1;
    return 
$param;
}

echo 
algo(); // imprime 1
echo $param// imprime 1

?>
Como veras, puedo acceder desde afuera del ambito de la funcion a la variable

Bufff, pero eso es matar una mosca de un cañonazo!
Y respecto a la otra pregunta que te he hecho? Es decir ¿Donde exactamente he de poner mysql_free_result para que pueda devolver el recordset y luego me lo libere una vez haya devuelto los valores?
  #8 (permalink)  
Antiguo 22/02/2010, 13:57
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: unset al devolver un recordset

A ver, vos lo que necesitas es liberar memoria de una funcion que te devuelve esto?


Código PHP:
function query($string){

$var mysq_query($string);
return 
$var;


O esto?

Código PHP:
function query($string){

$var mysq_query($string);
$foo mysql_fetch_array($var);
return 
$foo;


__________________
HV Studio
Diseño y desarrollo web
  #9 (permalink)  
Antiguo 22/02/2010, 18:50
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 10 años, 2 meses
Puntos: 8
Respuesta: unset al devolver un recordset

Cita:
Iniciado por jackson666 Ver Mensaje
A ver, vos lo que necesitas es liberar memoria de una funcion que te devuelve esto?


Código PHP:
function query($string){

$var mysq_query($string);
return 
$var;


O esto?

Código PHP:
function query($string){

$var mysq_query($string);
$foo mysql_fetch_array($var);
return 
$foo;



Me refiero al primer caso de los que has puesto, aunque tampoco estaria mal saber la solucion para los 2 casos.
A ver si me puedes ayudar.
Gracias
  #10 (permalink)  
Antiguo 22/02/2010, 19:41
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: unset al devolver un recordset

Entonces es mas que sencillo tu problema...
Código PHP:
function query($string){

$var mysql_query($string);
return 
$var;

}

$result query("SELECT algo FROM tabla;");

# ciclas, mostras resultados y demas y luego

mysql_free_result($result);

# No pienses que $var quedaria sin liberar 
__________________
HV Studio
Diseño y desarrollo web
  #11 (permalink)  
Antiguo 23/02/2010, 04:35
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 10 años, 2 meses
Puntos: 8
Respuesta: unset al devolver un recordset

Cita:
Iniciado por jackson666 Ver Mensaje
Entonces es mas que sencillo tu problema...
Código PHP:
function query($string){

$var mysql_query($string);
return 
$var;

}

$result query("SELECT algo FROM tabla;");

# ciclas, mostras resultados y demas y luego

mysql_free_result($result);

# No pienses que $var quedaria sin liberar 
Seguro que $var se libera sola?!?!?!?
  #12 (permalink)  
Antiguo 23/02/2010, 08:47
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: unset al devolver un recordset

Y si $var esta en $result...
__________________
HV Studio
Diseño y desarrollo web
  #13 (permalink)  
Antiguo 23/02/2010, 10:11
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 10 años, 2 meses
Puntos: 8
Respuesta: unset al devolver un recordset

Cita:
Iniciado por jackson666 Ver Mensaje
Y si $var esta en $result...
Perdona pero no entiendo lo que quieres decir. Me lo puedes aclarar?
  #14 (permalink)  
Antiguo 23/02/2010, 11:02
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 10 años, 1 mes
Puntos: 65
Respuesta: unset al devolver un recordset

Te quedan dudas? simple

Código PHP:
function query($string$libera 0){

if(
$libera == 0){

    
$var mysql_query($string);
    return 
$var;

}else{

    
mysql_free_result($var);
    return;
}

}

$result query("SELECT algo FROM tabla;");
query(null,1);

# Paranoia a full....
mysql_free_result($result); 

# Creo que en alguno de los 2 te va a tirar error 
No se que cantidad de resultados estaras manejando, pero si no es GIGANTE la cantidad, no tiene sentido lo que estas haciendo.
La memoria se libera al finalizar el programa, y la conexion se cierra en el mismo momento...
__________________
HV Studio
Diseño y desarrollo web

Etiquetas: devolver, recordset, unset
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 22:27.