Hola Gente. Aquí les traigo un pequeño aporte y viene acompañado de una peticion de ayuda para mejorarlo. La escencia es una clase generica para trabajar con BD que hemos estado construyendo mis amigos y yo como método de aprendizaje. Esta es la clase:
<?php
include './conf/bd.php';
/**
* BD
*/
class Bd
{
private $mysqli;
public function getMysqli()
{
return $this->mysqli;
}
public function setMysqli($mysqli)
{
$this->mysqli = $mysqli;
}
public static function conectar()
{
$connect = Conn::connectar(); //Esto auto-instancia la clase Conn y ejecuta el metodo 'connectar()'
$bd = new Bd();
$bd->setMysqli(new mysqli($connect->getHost(), $connect->getUsername(), $connect->getPassword(), $connect->getBd()));
return $bd; //Te da la instancia del objeto bd.
}
public static function Insert($tabla, $array)
{
$bd = bd::conectar();
$_query = "";
$_query = "insert INTO $tabla (" . implode(', ', array_keys($array)) . ' ) values (';
foreach ($array as $key => $value) {
if (is_numeric($value)) {
$_query .= ', ' . $value;
} else {
$_query .= ", '" . $value . "'";
}
}
$_query = str_replace('(,', '(', $_query);
$_query .= ')';
$bd->execute('insertar', $_query);
}
public static function select($tabla, $params, $orderby=false, $select=false)
{
$bd = bd::conectar();
if(!$select) {
$sql = "SELECT * FROM $tabla ";
}
else{
$sql = "SELECT $select FROM \"$tabla\" ";
}
$sql .= Bd::getWhere($params);
if ($orderby)
{
$sql .= Bd::getOrderBy($orderby);
}
$bd->execute('Seleccionar', $sql);
}
public static function delete($table, $parm)
{
$bd=bd::conectar();
$sql = "DELETE FROM \"$table\" ";
$sql .= Bd::getWhere($parm);
$bd->execute("Eliminar", $sql);
}
private function getWhere($params)
{
if (count($params) == 0)
return "";
$sql = " WHERE (";
foreach ($params as $i => $val) {
$op = $i != 0 ? isset($val['op']) ? $val['op'] : "AND" : "";
$cond = isset($val['cnd']) ? $val['cnd'] : "=";
$col = $val['col'];
$val = '"' . $val['value'] . '"';
$sql .= " $op $col $cond $val";
}
$sql .= " )";
return $sql;
}
private function getOrderBy($params)
{
if (count($params) == 0)
return "";
$sql = " ORDER BY (";
foreach ($params as $i => $val) {
$op = $i != 0 ? "," : "";
$cond = isset($val['cnd']) ? $val['cnd'] : "ASC";
$col = $val['col'];
$sql .= " $op $cond ";
}
$sql .= " )";
return $sql;
}
private function execute($type, $query)
{
$consulta = $this->getMysqli()->query($query) or die ("Error al $type: <br>" . $this->getMysqli()->error);
return $consulta;
}
}
?>
Para usarla, solo la incluyen y pueden hacer
Bd::metodo($tabla, $args)
y Aqui les dejo los ejemplos para que vean el uso antes de mostrarle donde necesito su ayuda. Asi colaboramos entre todos que no me gusta siempre venir a pedir (aunque hoy tambien es el caso) esta vez me gustaria aportar algo de acorde a mi nivel y mis pocos conocimientos.
Ejemplos de Uso:
//Ejemplo de Insertar:
$datos = array("nombre"=>$this->nombre, "usuario"=>$this->usuario, "password"=>$cifrar, "roll"=>$this->roll);
$insertar = Bd::Insert("usuarios", $datos);
//Ejemplo de select (el asc lo cambias por cualquier forma de ordenar en mysql)
$where = [["col"=>"usuario", "value"=>$this->usuario], ["col"=>"nombre", "value"=>$this->nombre, "op"=>"OR"]];
$order = [["col"=>"usuario", "cnd"=>"asc"]];
$check = Bd::select("usuarios", $where);
//Ejemplo de Delete
$where = [["col"=>"usuario", "value"=>$this->usuario], ["col"=>"nombre", "value"=>$this->nombre, "op"=>"OR"]];
$delete = Bd::delete("usuarios", $where);
La funcion para el update aun no esta lista, por eso no la puse aqui. Si alguien se anima a completarla, sientase a gusto.