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

Hola masnovita, te voy a contar lo que yo hago, no puedo afirmar que este bien o mal ya que soy tan nuevo como vos en esto. Y justamente me paso lo mismo que a vos, java me contagio el bichito de los objectos.

Nro1, usaria un modelo para setear la configuracion, direccion de la base, pass de la base, tabla, y cualquier otra cosa que queramos;

Código PHP:
class DBConfig {

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

Bien, ahora vamos a crear la clase Database, esta se encarga de crear un objecto DBConfig cuando se crea y asignarselo, luego cuando le pidas una query vera si esta conectada o no, si no esta conectada se conecta y te devuelve la query.

Código PHP:
class Database {

    private 
$dbConfig;
    private 
$link;
    
    public function 
__construct($dbHost,$dbUser,$dbPassword,$dbName) {
        
        
$this->dbConfig=new DBConfig($dbHost,$dbUser,$dbPassword,$dbName);
    }
    
    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);
    }


Lo que faltaria es que crees la clase usuario que haga algo como;

Código PHP:
class Usuario {
   private 
$id;
   private 
$login;
   private 
$pass;

   public function 
getLogin() { return $this->login; }
   public function 
getPass() { return $this->pass; }

   public 
__construct($id) {
       try {
           
$this->loadFromCache($id);
       } catch (
Exception $e) {
           
$this->loadFromDatabase($id);
       }
    }

    private function 
loadFromDatabase($id) {
        
// database debe ser creada primero
        
global $laDatabase;

        if(!
is_object($laDatabase)) throw new Exception ('no se creo objeto database');

        if (
$id<0) throw new Exception('error en id');

//        $laDatabase->tunquery("select usando el ".$id);
//        fetch assoc
//       setear usuario
//         $this . salvar en cache
    
}

    private function 
loadFromCache($id) {
       
//buscar en cache
       // si no esta tirar excepcion 
      // si esta setear usuario

   
}

Bueno, ahora lo que tenes que hacer es un php que se encargue de cargar los modelos y inicializar la base de datos;

include 'modelos.php';
$laDatabase= new Database('elHostdeDB','nombre de usuario','pass','nombre de la base');

Buenos, espero que esto ayude.

Saludos, Eugenio