Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/01/2009, 12:54
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Opinion sobre clase para MySQL

Amigos: empecé a re-re-inventar la rueda digo... a hacer mi clase para conectarme a MySQL

Hasta aca lo que he hecho - sean libres de criticar

Código PHP:
<?php 
class dbx {     
  private static 
$instancia;    // patron:  Singleton (una sola instancia)
    
  
private $con;
  private 
$user;
  private 
$pass;
  private 
$server;
  private 
$db
  private 
$sql;  // consulta
  
private $resultado;
  private 
$total// cantidad de resultados  => parsear la consulta para saber si es SELECT o DELETE/UPDATE
  
private $pos// registro actual
      
   // Desde aqui se obtiene la instancia OJO con el static 
    
public static function getInstance () {
        if (!isset(
self::$instancia)) {
            
$obj __CLASS__;
            
self::$instancia = new $obj;
        } 
        return 
self::$instancia;
   }  
  
  function 
setServer ($server){
    
$this->server=$server;
  }
    
  function 
setUser ($user){
    
$this->user=$user;
  }
  
  function 
setPass ($pass){
    
$this->pass=$pass;
  }
  
  function 
conectar($db){
    if (!isset(
$this->con)) {
      
$this->db=$db;   // setDb          
      
$this->con mysql_connect("localhost",$this->user,$this->pass) or die(mysql_error()); 
      
mysql_select_db($db) or die(mysql_error());  
     }    
  return (
$this->con);     // hago esto ??
  
}    

  function 
execute($sql){
    
$this->sql=$sql;  
    
$this->resultado mysql_query($this->sql);
    
    if ((
$consulta[0]=="S") OR ($consulta[0]=="s")) 
      
$this->total mysql_num_rows($this->resultado);   // SELECT 
    
else 
      
$this->total mysql_affected_rows($this->con); // INSERT, UPDATE, DELETE               
  
}    
    
  function 
next(){
    
$this->pos++; // avanzo al siguiente;      
  
}      
  
  function 
prev(){
    
$this->pos--; // avanzo al siguiente;      
  
}      

  function 
getTotal(){
    return (
$this->total);
  }
  
  function 
getOne($campo){        
    
$salida mysql_result($this->resultado,$this->pos,$campo);    
    return (
$salida);
  }    
  
  private function 
__construct(){     
     
$this->setServer("localhost"); // por defecto es localhost
     
$this->pos=0;     
  }  
  
   private function 
__clone() { 
        throw new 
Exception('No se permite clonar'); 
   } 
  
}    

 
$my dbx::getInstance(); // new dbx;   ya no uso NEW porque eso es para crear instancias multiples de un objeto
 
$my->setUser('mi_user');
 
$my->setPass('mi_pass');
 
$my->conectar('mi_base');
 
$my->execute("SELECT * FROM banned"); 
 echo 
"Total registros: ".$my->getTotal()."<br/>";
 echo 
$my->getOne('ip');
 echo 
$my->getOne('fecha');
?>
Caracteristicas:

* La clase utiliza el patron Singleton como ha sabido sugerir el amigo GatorV!

* Se parsea la consulta para determinar si es un SELECT u otro tipo de sentencia y elegir la funcion adecuada para determinar el numero de filas afectadas o seleccionadas (sobre esto habia una consulta respeto del rendimiento de la clase por el parseo pero se hizo extremadamente simple y rapido)
__________________
Salu2!

Última edición por Italico76; 05/01/2009 a las 11:59