Ver Mensaje Individual
  #8 (permalink)  
Antiguo 03/12/2007, 19:43
eugenioclrc
 
Fecha de Ingreso: noviembre-2007
Mensajes: 38
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: PHP y MySql guardando y recuperando objetos

Hola masnovita, me tome el trabajo de acomodar la parte de la base de datos, no arregle la clase usuario, te pego el codigo, y te advierto que no llegue a probarlo.

Por favor, indiquenme cualquier error teorico o de programacion que haya cometido. Por favo si hacen una correcion teorica justifiquenla, asi aprendo un poco jeje.

Código PHP:
<?php

abstract class Singleton {
    
//suena a reggaetton no?
    
private $yoMismo;
    
    public function 
__construct(){
        
// si no existo me creo
        
if (!isset($this->yoMismo))
            
$this->yoMismo=new $this;

        return 
$this->yoMismo;
    }
}

class 
DBConfig extends Singleton {

    private 
$dbHost;
    private 
$dbUser;
    private 
$dbPassword;
    private 
$dbName;
        
    public function 
__construct($dbHost=null,$dbUser=null,$dbPassword=null,$dbName=null) {
    
        
$this->dbHost=$dbHost;
           
$this->dbUser=$dbUser;
           
$this->dbPassword=$dbPassword;
           
$this->dbName=$dbName;
        
        
parent::__construct();    
    }
    
    public function 
getDbHost() {
        return 
$this->dbHost;
    }
    public function 
getDbUser() {
        return 
$this->dbUser;
    }
    public function 
getDbPassword() {
        return 
$this->dbPassword;
    }
    public function 
getDbName() {
        return 
$this->dbName;
    }
}

class 
Database extends Singleton {

    private 
$dbConfig;
    private 
$link;
    
    public function 
__construct($dbHost,$dbUser,$dbPassword,$dbName) {

        if (isset(
$this->dbHost)&&isset($this->dbUser)&&isset($this->dbPassword)&&isset($this->dbName))         
            
$this->dbConfig=new DBConfig($dbHost,$dbUser,$dbPassword,$dbName);
        
        return 
parent::__construct();
    }
    
    private function 
connect() {

        
// if there is no link to DB then connect
        
if (!isset($this->link)){
            
$this->link=mysql_connect($this->dbConfig->getDbHost(),$this->dbConfig->getDbUser(),$this->dbConfig->getDbPassword());
            
mysql_select_db($this->dbConfig->getDbName(),$this->link);

            if (!isset(
$this->link))
                throw new 
Exception('Not connected',1);
        }
        
    }
    
    public function 
tquery($sql) {
        
$this->connect();
        
        if(!
$result mysql_query($sql,$this->link))
            throw new 
Exception('SQL ERROR',2);
        return(
$result);
    }
    
    public function 
tunquery($sql) {
        
$this->connect();
        
        if(!
$result mysql_unbuffered_query($sql,$this->link))
            throw new 
Exception('SQL ERROR',2);
        return(
$result);
    }
    
    public function 
escape($value) {
        
$this->connect();
        
        if(
get_magic_quotes_gpc()) $value stripslashes($value);
        if(!
is_numeric($value)) $value mysql_real_escape_string($value,$this->link);
        return(
$value);
    }
}
Ahora solo debes iniciar una vez el objeto $database, y luego cada vez que quieras usarlo en una clase debes poner;
$elNombreQueQuieras = new Database;

Recuerda que la primera vez que lo crees debes poner;
$cualquierCosa=new Database('elHostdeDB','nombre de usuario','pass','nombre de la base');

Te recomendaria hacerlo en el mismo archivo que guardes la clase database, asi con incluirlo te aseguras de setearlo, o podrias hacer un archivo de init para que quede mas prolijo.



Saludos, Eugenio