Veo que muchos aqui tratan de empezar a hacer sus "Clases de conexión" no obstante que les parece si hacemos un ejemplo un poco más OOP y mas robusto.
Misión: Crear una conexión con "cualquier base de datos" solo creando los adaptadores necesarios haciendo uso de interfaces.
DbInterface.php
Código PHP:
<?php
interface DbInterface
{
public function conectar();
public function desconectar();
public function ejecutar(SQL $sql);
}
Db.php
Código PHP:
<?php
require_once 'DbInterface.php';
class Db
{
private $db;
public function __construct(MySQL $db)
{
$this->db = $db;
}
public function conectar()
{
$this->db->conectar();
}
public function desconectar()
{
$this->db->desconectar();
}
public function ejecutar(SQL $sql)
{
return $this->db->ejecutar($sql);
}
}
SQL.php
Código PHP:
<?php
class SQL
{
private $consulta;
private $campos = array();
private $tablas = array();
private $wheres = array();
private $orders = array();
public function addCampo($campo)
{
$this->campos[] = $campo;
}
public function addTabla($tabla)
{
$this->tablas[] = $tabla;
}
public function addWhere($where)
{
$this->wheres[] = $where;
}
public function addOrder($or)
{
$this->orders[] = $or;
}
private function make()
{
$this->consulta = 'SELECT ';
foreach($this->campos as $campo){
$cadenaCampos.= ' '.$campo.', ';
}
$this->consulta.= substr($cadenaCampos,0,strlen($cadenaCampos)-2);
$this->consulta.= ' FROM ';
foreach($this->tablas as $tabla){
$cadenaTablas.= ' '.$tabla.', ';
}
$this->consulta.= substr($cadenaTablas,0,strlen($cadenaTablas)-2);
if(count($this->wheres)!=0){
$this->consulta.= ' WHERE ';
foreach($this->wheres as $where){
$cadenaWheres.= ''.$where.' AND ';
}
$this->consulta.= substr($cadenaWheres,0,strlen($cadenaWheres)-4);
}
if(count($this->orders)!=0){
$this->consulta.= ' ORDER BY ';
foreach($this->orders as $order){
$cadenaOrders.= ''.$order.', ';
}
$this->consulta.= substr($cadenaOrders,0,strlen($cadenaOrders)-2);
}
return $this->consulta;
}
public function get()
{
return $this->make();
}
public function toString()
{
return $this->make();
}
}
MySQL.php
Código PHP:
<?php
require_once 'DbInterface.php';
class MySql implements DbInterface
{
private $host;
private $user;
private $pass;
private $db;
private $datos = array();
public function __construct()
{
$args = func_get_args();
$this->host = $args[0];
$this->user = $args[1];
$this->pass = $args[2];
$this->db = $args[3];
}
public function conectar()
{
mysql_connect($this->host,$this->user,$this->pass);
mysql_select_db($this->db);
}
public function desconectar()
{
mysql_close();
}
public function ejecutar(SQL $sql)
{
$consulta = mysql_query($sql->get());
while($row = mysql_fetch_assoc($consulta)){
$datos[] = $row;
}
return $datos;
}
}
y bien como se usa todo esto..
index.php
Código PHP:
<?php
require_once 'Db.php';
require_once 'MySql.php';
require_once 'SQL.php';
//Aqui se le podria enviar cuaqluier tipo de base de datos solo creando un "Adaptador" que implemente la interface DbInterface
$db = new Db(new MySql('localhost','root','','password'));
$db->conectar();
$consulta = new SQL();
$consulta->addTabla('clientes');
$consulta->addCampo('razon');
$consulta->addCampo('nombre');
$consulta->addCampo('apellidos');
//$consulta->addWhere("nombre = 'Pepito'");
$consulta->addOrder("razon DESC");
$datos = $db->ejecutar($consulta);
foreach($datos as $val){
echo $val['nombre']." ".$val['apellidos']."<br>";
}
?>
Espero te de una idea más clara de las posibilidades de la OOP