Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/05/2013, 10:06
Avatar de bulter
bulter
 
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 3 meses
Puntos: 20
Respuesta: Opinar Sobre esta CLASS

Mmm no mola esta "clase" :|
Primero, no puedes poner le nombre AcortarURL a una clase que sera para hacer consultas, manipular db o lo que sea. Es como llamar a un gato perro :)

Código PHP:
if($this->Query):
            return 
$this->Query[$camp];
        else:
            echo 
'No existe';
        endif; 
??? usa {}

Código PHP:
if($this->Query)
{
            return 
$this->Query[$camp];
        }
        else
        {
            echo 
'No existe';
        } 
Empecemos por el constructor.

Código PHP:
public function __construct()
    {
        
$this->host '.......';
        
$this->user '.......';
        
$this->pass '.....';
        
$this->db '...........';
        
$this->connect mysqli_connect($this->host,$this->user,$this->pass,$this->db);
    } 
No tiene ni 1 comprobacion si los parametros que han sido pasados con validos y tampoco has definido la variable $this->connect simplemente la usas, ademas $this->connect es un nombre malo debe de ser $this->connection o $this->dbConnection, porque lo que contiene es un resource y no es una funciona que hara la conexion.

Código PHP:
$this->connect mysqli_connect($this->host,$this->user,$this->pass,$this->db); 
Si la conexion no se ha realizado, nada lo indica el codigo sigue su marcha , y lo correcto es que des algun error.

Código PHP:
$this->host$this->user$this->pass$this->db 
Tampoco las tienes definidas. Aparte estas variables deben de ser privadas.

Código PHP:
public function __construct() 
Ya que vas a usar clases, el usuario , el host etc los podrias pedir como parametros.

Bueno el constructor se podria quedar asi:

Código PHP:
<?php
class DBException extends Exception { }

class 
DB
{
    private 
$dbData = array();
    private 
$connection null;
    
    public function 
__construct(array $dbData)
    {
        if(!isset(
$dbData["host"], $dbData["user"], $dbData["pass"], $dbData["dbName"]))
        {
            throw new 
InvalidArgumentException("The passed arguments are invalid.");
        }
        
        
/// Filter all the passed data
        
$this->dbData $this->Filter($dbData);
        
        
// Connect to the database
        
$this->connection = @mysqli_connect($this->dbData["host"], $this->dbData["user"], $this->dbData["pass"], $this->dbData["dbName"]);
        
        if(!
$this->connection)
        {
            throw new 
DBException("Cannot connect to the database. " mysqli_connect_error());
        }
        
        return 
true;
    }
    
    protected function 
Filter(&$filter)
    {
        if(
$filter == "" || $filter == null)
        {
            return;
        }
        
        foreach(
$filter as &$value)
        {
            if(
is_array($value))
            {
                
$value $this->Filter($value);
            }
            else
            {
                
$value htmlspecialchars(trim(addslashes($value)));
            }
        }
        
        return 
$filter;
    }
}

try
{
    
$db = new DB(array("host"   => "localhost"
                       
"user"   => "tmpUser"
                       
"pass"   => "@t1ptron1c!"
                       
"dbName" => "test"));
}
catch(
DBException $dbExc)
{
    echo 
$dbExc->getMessage();
}                   

?>
Veamos las otras 2 funciones que tienes

Código PHP:
public function Query($sql,$camp)
    {
        
$this->Query mysqli_fetch_assoc(mysqli_query($this->connect,$sql));
        if(
$this->Query):
            return 
$this->Query[$camp];
        else:
            echo 
'No existe';
        endif;
        return 
$this->Query;
    }
    
    public function 
Select($sql)
    {
        
$this->Select mysqli_query($this->connect,$sql);
        return 
$this->Select;
    } 
Empezamos por public function Query($sql,$camp)
En ambas funciones usas mysqli_query($this->connect,$sql), y tienes una funcion que se llama Query ? Esto lo no pillo. Bueno la cuestion es que la primera funcion que la llamaste Query creo que le vendria mejor SelectRow. Y la funcion Select es la que hace en realidad el query, asi que ella es la que se deberia de llamar query. Otra cosa aparte es que no hace ningun check / vertificacion de lo que pasa dentro de la funcion, lo dejas invisible y que siga a su marcha pase lo que pase. Haces las querys sin comprobar si ya tienes una conexion abierta.

Código PHP:
$this->Select mysqli_query($this->connection$sql);
        return 
$this->Select
Porque le asignas algo a $this->Select y luego devuelves lo mismo y la variable se queda en lo vacio ? No tiene sentido. Otra cosa la funcion SelectRow (o Query en tu caso) podrias hacer que aparte de un campo pudiera devolver mas por si llegas a necesitar lo. Aun que eso no tiene mucho sentido ya que lo puedes hacer atraves del SQL, pero bueno.
La clase se podria quedar algo asi:

Código PHP:
<?php
class DBException extends Exception { }

class 
DB
{
    private 
$dbData = array();
    private 
$connection null;
    
    public function 
__construct(array $dbData)
    {
        
///
        /// Check if all the data is defined.
        ///
        
if(!isset($dbData["host"], $dbData["user"], $dbData["pass"], $dbData["dbName"]))
        {
            throw new 
InvalidArgumentException("The passed arguments are invalid.");
        }
        
        
/// Filter all the passed data
        
$this->dbData $this->Filter($dbData);
        
        
// Connect to the database
        
$this->connection = @mysqli_connect($this->dbData["host"], $this->dbData["user"], $this->dbData["pass"], $this->dbData["dbName"]);
        
        if(!
$this->connection)
        {
            throw new 
DBException("Cannot connect to the database. " mysqli_connect_error());
        }
        
        return 
true;
    }
    
    public function 
SelectRow($sql$row)
    {
        if(!
is_string($row) && !is_array($row))
        {
            throw new 
InvalidArgumentException("DB::SelectRow expects \$row to be string or array.");
        }
        
        
$query mysqli_fetch_assoc($this->Query($sql));
        
        if(
is_string($row))
        {
            if(!isset(
$query[$row]))
            {
                throw new 
DBException("The row " $row " can not be found.");
            }
            
            return 
$query[$row];
        }
        else
        {
            
$arrayToReturn = array();
            
            foreach(
$row as $value)
            {
                if(!isset(
$query[$value]))
                {
                    throw new 
DBException("The row " $value " can not be found.");
                }
                else
                {
                    
$arrayToReturn[$value] = $query[$value];
                }
            }
            
            return 
$arrayToReturn;
        }
    }
    
    public function 
Query($sql)
    {
        if(!
is_string($sql))
        {
            throw new 
InvalidArgumentException("DB::Query takes string as parameter.");
        }
        
        if(!
$this->connection)
        {
            throw new 
DBException("No Connection to the database.");
        }
        
        
$query = @mysqli_query($this->connection, (string)$this->Filter($sql));
        
        if(!
$query)
        {
            throw new 
DBException(mysqli_error($this->connection));
        }
        
        return 
$query;
    }
    
    protected function 
Filter(&$filter)
    {
        if(
$filter == "" || $filter == null)
        {
            return;
        }
        
        foreach(
$filter as &$value)
        {
            if(
is_array($value))
            {
                
$value $this->Filter($value);
            }
            else
            {
                
$value htmlspecialchars(trim(addslashes($value)));
            }
        }
        
        return 
$filter;
    }
}

try
{
    
$db = new DB(array("host"   => "localhost"
                       
"user"   => "tmpUser"
                       
"pass"   => "@t1ptron1c!"
                       
"dbName" => "test"));
    
    
print_r($db->SelectRow("SELECT * FROM user", array("name""email")));    
}
catch(
DBException $dbExc)
{
    echo 
$dbExc->getMessage();
}                   

?>
Eso esta lejos del perfecto solo te digo como podria ser algo mejor. Le faltan muchas cosas para llegar a ser util.

Saludos