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');
?>
* 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)