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

GatorV: muchisimas gracias!!!! no sabes como me zafastes..... voy a tener que estudiar bien el tema ese de la 'visibilidad'

Ahora anda bien.... y ademas de getTotal(), hice getTotalSelected() y getTotalAffected() asi si hay anidamientos entre un INSERT y un SELECT (como vos me decias) ya puedo obtener por separado los resultados

getTotal() lo he dejado porque aunque es muy particular... es el caso mas comun xD


Código PHP:
<?php
abstract class database{
    protected 
$_con
    protected 
$_user;
    protected 
$_pass;
    protected 
$_server;
    protected 
$_db;
    protected 
$_consulta;
    protected 
$_resultado;    
    protected 
$_pos;
    
    function 
setServer($server)
    {
        
$this->_server $server;
    }
    function 
setUser($user)
    {
        
$this->_user $user;
    }
    function 
setPass($pass)
    {
        
$this->_pass=$pass;
    }
    
    abstract function 
connect($db);
    
    abstract function 
execute($consulta);
    
    abstract function 
getTotal();
}

class 
sql extends database
{
    private static 
$_instancia;  
    public 
$_server 'localhost';        
    
    
/* Si es privado, no se usa nunca */
    
private function __construct(){}

    public static function 
getInstance()
    {
        if (!isset(
self::$_instancia)) {
            
$obj __CLASS__;
            
self::$_instancia = new $obj;
        }
        return 
self::$_instancia;
    }
    public function 
connect($db)
    {
        if (!isset(
$this->_con)){
            
            
$this->_db $db;

            
$this->_con mysql_connect(
                
$this->_server,
                
$this->_user,
                
$this->_pass) or die(mysql_error()
            );
            
mysql_select_db($db) or die(mysql_error());
        }
    }
    public function 
execute($sql)
    {    
        
$this->_consulta $sql;                
        
$this->_resultado mysql_query($this->_consulta);          
    }
    public function 
next()
    {
        
$this->_pos++;
    }
    public function 
prev()
    {
        
$this->pos--; 
    }
    public function 
getTotal()  // para consultas simples (sin anidamientos)
    
{                
      if (
strtolower($this->_consulta[0]) == 's'){
        return 
mysql_num_rows($this->_resultado);
      }else{                       
        return 
mysql_affected_rows($this->_con);
      }        
    }    
    public function 
getTotalSelected()
    {       
      return  
mysql_num_rows($this->_resultado);     
    }
    public function 
getTotalAffected()
    {       
      return  
mysql_affected_rows($this->_con);  
    }        
    public function 
getOne($campo)
    {
        return 
mysql_result($this->_resultado,$this->_pos,$campo);
    }    
    public function 
getMulti()  // get into an array
    
{
        return 
mysql_fetch_array($this->_resultado);
    }        
    public function 
insert ($my_table$my_array) {  // mysql_insert_array:  as opposite of mysql_fetch_array:     
      
$keys array_keys($my_array); 
      
$values array_values($my_array); 
      
$sql 'INSERT INTO ' $my_table .' VALUES ("' implode('","'$values) . '")';       
      
$this->execute ($sql);    
    }    
    public function 
goRow ($fila_num){
      return 
mysql_data_seek ($this->_resultado$fila_num);
    }  
    public function 
getRow (){  // se trae una fila Y deja los campos en un array
      
return mysql_fetch_assoc($this->_resultado);
    }  
    private function 
__clone()
    {
        throw new 
Exception('No se permite clonar');
    }
}
?>
Quiero expresar mi agradecimiento por su infinita paciencia y constante colaboracion a Enrique y GatorV
__________________
Salu2!