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