Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Liberar memoria automáticamente después de cada consulta

Estas en el tema de Liberar memoria automáticamente después de cada consulta en el foro de PHP en Foros del Web. Hola, me preguntaba si esta forma de liberar la memoria de las consultas de forma automática sería correcta: Código PHP: class  database {     public function  __construct ...
  #1 (permalink)  
Antiguo 26/04/2014, 10:13
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
Liberar memoria automáticamente después de cada consulta

Hola, me preguntaba si esta forma de liberar la memoria de las consultas de forma automática sería correcta:

Código PHP:
class database
{

    public function 
__construct() 
    {
    
        
$this->MySQLi['hostname'] = 'localhost';
        
$this->MySQLi['username'] = '';
        
$this->MySQLi['password'] = '';
        
$this->MySQLi['database'] = 'db';
        
        
$this->Connection mysqli_connect($this->MySQLi['hostname'], $this->MySQLi['username'], $this->MySQLi['password'], $this->MySQLi['database']); 
        
        if(!
$this->Connection)
        {
            die(
'Error de conexion: ' mysqli_connect_error());
        }
        
    }
    
    public function 
query($sql)
    {
        
$this->Query $this->Connection->query($sql);
        return 
$this->Query;
                
//Liberar la memoria de la consulta
        
$this->Query->free();
    }
    
    public function 
close()
    {
        
$this->Connection->close();
    }
    
    

¿O hay que liberar la memoria manualmente después de utilizar fetch_assoc, num_rows, etc? Estoy haciendo un sitio web, y no se realmente cual seria el modo óptimo de liberar la memoria.
  #2 (permalink)  
Antiguo 26/04/2014, 13:01
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Liberar memoria automáticamente después de cada consulta

De entrada, es incorrecto generar una conexión para cada consulta realizada.

Luego, si tienes un return, todo lo que esté después, dentro del mismo método, será ignorado.

PHP cuenta con un "recolector de basura" que se encarga de liberar recursos (memoria, conexiones, etc.) y no es necesario hacerlo manualmente, a menos que tus scripts asi lo requieran, por la cantidad de datos manipulados, por falta de memoria disponible, etc.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 26/04/2014, 13:06
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: Liberar memoria automáticamente después de cada consulta

Gracias por tu respuesta, al final he optado por utilizar PDO:

Código PHP:
class database
{

    public function 
connect() 
    {
    
        try {
            
$this->Connection = new PDO('mysql:dbname=DB;host=127.0.0.1''root''');
            
$this->Connection->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
            
            return 
$this->Connection;
        } catch (
PDOException $e) {
            echo 
"ERROR: " $e->getMessage();
        }
        
        
    }
    

Creo que de ese modo seria correcto, no? No se a que te referías con lo de una conexión para cada consulta
  #4 (permalink)  
Antiguo 26/04/2014, 13:11
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Liberar memoria automáticamente después de cada consulta

Ouch, parece que vi mal tu código... sorry, fue mi error!
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 26/04/2014, 13:21
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: Liberar memoria automáticamente después de cada consulta

Ah, entonces marco tema como resuelto. Muchas gracias

Etiquetas: cada, liberar, memoria, 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 05:41.