Despues de mucho pensar y ponerme a trabajar un poco he generado esta clase, de la que me gustaria me dieran su opinion:
Código PHP:
class Mysql extends ModelBase
{
/*Método privado que me permite conocer la estructura de una tabla*/
private function describeTabla($tabla, $excluye="")
{
$consulta= $this->db->prepare('DESCRIBE '.$tabla);
$consulta->execute();
while($d=$consulta->fetch())
{
if( (is_array($excluye) && !in_array($d[0],$excluye)) || (!is_array($excluye) && $excluye != $d[0]) )
$salida[] = $d[0];
}
return $salida;
}
/*Metodo privado para poder redireccionar */
private function redirecciona($url="")
{
if(empty($url))
{
//Separo la ruta de las variables
$str=explode("?",$_SERVER['HTTP_REFERER']);
//Pongo la accion en listar
$url=$str[0]."?accion=listar";
}
echo '<script languaje="javascript">location.href=\''.$url.'\';</script>';
}
//Metodo publico para crear lista de datos
public function listado($tabla, $where="")
{
//realizamos la consulta de todos los items
$consulta = $this->db->prepare('SELECT * FROM '.$tabla.$where);
$consulta->execute();
//devolvemos la coleccion para que la vista la presente.
return $consulta;
}
//Método público que me permite cachar datos de un formulario y meterlos a una tabla
public function agregar($tabla,$data,$indice="",$valorIndice=0)
{
$salida=$this->describeTabla($tabla);
$query = "";
//Formo el query de manera dinámica
foreach($salida as $clave)
if(!empty($data[$clave]))
$query .= (($query=="")?"":",")."$clave='".$data[$clave]."'";
//Defino si actualizaré datos o insertaré
if($valorIndice!=0)
$query = "UPDATE $tabla SET ".$query." WHERE ($indice='".$datos[$indice]."')";
else
$query = "INSERT INTO $tabla SET $query";
//Preparo y ejecuto la consulta
$consulta = $this->db->prepare($query);
$consulta->execute();
//Redirecciono
$this->redirecciona();
}
//Mettodo publico para eliminar un registro
public function eliminar($tabla, $indice, $valor)
{
//realizamos la consulta de todos los items
$consulta = $this->db->prepare('DELETE FROM '.$tabla. ' WHERE '.$indice.'='.$valor);
$consulta->execute();
//devolvemos la coleccion para que la vista la presente.
$this->redirecciona();
}
}