Creando una capa de abstraccion con PHP y mysqli

  • 5 Respuestas
  • 5866 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 69
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil

Creando una capa de abstraccion con PHP y mysqli

  • en: Enero 29, 2013, 12:54:32 pm
mysqli, es el conector para bases de datos MySQL recomendado por PHP, para interactuar desde tu aplicación con una base de datos MySQL. Pero crear una capa de abstracción genérica, reutilizable y orientada a objetos, suele ser un dolor de cabeza. En este artículo, veremos como lograr crear una capa de abstracción a bases de datos, simple y muy fácil de usar.

En otras palabras mysqli es una extencion mejorada del conector mysql, esta extencion hace que la coneccion con la base de datos sea mas segura y contiene mas seguridad contra inyecciones SQL y mas...

Por los que no saben que es una capa de abstraccion a base de datos fijense aqui: You are not allowed to view links. Register or Login

Resumiendo todo en este tutorial les voy a mostrar un codigo para que se puedan conectar totalmente seguros a un base de datos gracias a mysqli!

Código: You are not allowed to view links. Register or Login
class DBConnector {
        protected static $conn;
        protected static $stmt;
        protected static $reflection;
        protected static $sql;
        protected static $data;
        public static $results;
        protected static function conectar() {
            self::$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        }
       
        protected static function preparar() {
            self::$stmt = self::$conn->prepare(self::$sql);
            self::$reflection = new ReflectionClass('mysqli_stmt');
        }
       
        protected static function set_params() {
            $method = self::$reflection->getMethod('bind_param');
            $method->invokeArgs(self::$stmt, self::$data);
        }
       
        protected static function get_data($fields) {
            $method = self::$reflection->getMethod('bind_result');
            $method->invokeArgs(self::$stmt, $fields);
            while(self::$stmt->fetch()) {
                self::$results[] = unserialize(serialize($fields));
            }
        }
       
        protected static function finalizar() {
            self::$stmt->close();
            self::$conn->close();
        }
       
        public static function ejecutar($sql, $data, $fields=False) {
            self::$sql = $sql;
            self::$data = $data;
            self::conectar();
            self::preparar();
            self::set_params();
            self::$stmt->execute();
            if($fields) {
                self::get_data($fields);
            } else {
                if(strpos(self::$sql, strtoupper('INSERT')) === 0) {
                    return self::$stmt->insert_id;
                }
            }
            self::finalizar();
        }
    }

ese seria el codigo de la capa de abstraccion basicamente, ahora, para guardar datos en la base de datos se usa este codigo:
Código: You are not allowed to view links. Register or Login
        $sql = "INSERT INTO productos
            (categoria, nombre, descripcion, precio)
            VALUES (?, ?, ?, ?)";
        $data = array("isbd",
                    "{$categoria}", "{$nombre}", "{$descripcion}", "{$precio}");
        $insert_id = DBConnector::ejecutar($sql, $data);

y el codigo para generar una consulta seria el siguiente
Código: You are not allowed to view links. Register or Login
        $sql = "SELECT nombre, descripcion, precio
                FROM productos
                WHERE categoria = ?";
        $data = array("i", "{$categoria}");
        $fields = array("Producto" => "", "Descripción" => "", "Precio" => "");
        DBConnector::ejecutar($sql, $data, $fields);

Si quieren entender el siguiente codigo les recomiendo leer la primera edicion de los libros You are not allowed to view links. Register or Login yo no los puse ya que se me extenderia y la mayoria no entenderia casi nada, a mi se me complico bastante para entender, imaginense para alguien que no tiene conocimientos de mysqli!

Ya de paso agradesco a You are not allowed to view links. Register or Login y recomiendo estas revistas de hackers and developers!

Conectado Harkonidaz

  • *
  • Colaborador
  • *
  • Mensajes: 853
  • Actividad:
    16.67%
  • Country: 00
  • Reputación 2
    • Ver Perfil
    • MI github
    • Email

Re:Creando una capa de abstraccion con PHP y mysqli

  • en: Enero 29, 2013, 01:23:48 pm
la verdad hacen falta aportes como este.

se agradece.

saludos!

Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 69
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil

Re:Creando una capa de abstraccion con PHP y mysqli

  • en: Enero 29, 2013, 01:26:19 pm
Graciaas, soy mas de hacer aportes bastante completos, pero igual no los hago muy seguido xdd, en un ratito subo uno bastante bueno de cuando estaba en un viejo team!

Conectado Harkonidaz

  • *
  • Colaborador
  • *
  • Mensajes: 853
  • Actividad:
    16.67%
  • Country: 00
  • Reputación 2
    • Ver Perfil
    • MI github
    • Email

Re:Creando una capa de abstraccion con PHP y mysqli

  • en: Enero 29, 2013, 01:30:18 pm
You are not allowed to view links. Register or Login
Graciaas, soy mas de hacer aportes bastante completos, pero igual no los hago muy seguido xdd, en un ratito subo uno bastante bueno de cuando estaba en un viejo team!

yo no tengo tiempo de hacer muchos aportes, asique normalmente traigo aportes de otras personas.

pero tengo serias ganas de hacer aportes como las Formas normales para normalizar una base de datos.

entre otras cosas, empezar a aportar cosas más avanzadas de las que están ahora, no la gran cosa pero si mejor que el tipo de aportes que hay hoy en día, como principios de encapsulamiento.

pero no eh tenido tiempo :/

saludos!

Desconectado 2Fac3R

  • *
  • Underc0der
  • Mensajes: 250
  • Actividad:
    0%
  • Reputación 0
  • Why be a king, when you can be a god
  • Skype: rockeg_18
  • Twitter: @2Fac3R
    • Ver Perfil
    • Escuela de Hackers & Programación

Re:Creando una capa de abstraccion con PHP y mysqli

  • en: Enero 29, 2013, 03:43:03 pm
Buen aporte! en lo personal prefiero PDO, aunque MySQLi es una muy buena alternativa
Zalu2
Escuela de Hackers & Programación.
You are not allowed to view links. Register or Login

Desconectado sr.mcbecker

  • *
  • Underc0der
  • Mensajes: 14
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • *sinrevelar!
    • Email

Re:Creando una capa de abstraccion con PHP y mysqli

  • en: Enero 30, 2013, 09:11:01 pm
Gracias por tu ayuda, voy a intentar ponerme a ello =D!
Tengo algo muy gordo entre manos!

 

Creando un entorno de trabajo para MongoDB y Django

Iniciado por Sanko

Respuestas: 1
Vistas: 4002
Último mensaje Enero 03, 2013, 08:58:18 pm
por ANTRAX