comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Creando una capa de abstraccion con PHP y mysqli

  • 5 Respuestas
  • 4164 Vistas

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

Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« 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: No tienes permisos para ver links. Registrate o Entra con tu cuenta

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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
        $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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
        $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 No tienes permisos para ver links. Registrate o Entra con tu cuenta 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 No tienes permisos para ver links. Registrate o Entra con tu cuenta y recomiendo estas revistas de hackers and developers!

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #1 en: Enero 29, 2013, 01:23:48 pm »
la verdad hacen falta aportes como este.

se agradece.

saludos!

Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 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!

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #3 en: Enero 29, 2013, 01:30:18 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
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: 237
  • Actividad:
    3.33%
  • Reputación 0
  • Why be a king, when you can be a god
    • Ver Perfil
    • Escuela de Hackers & Programación
  • Skype: rockeg_18
  • Twitter: @2Fac3R
« Respuesta #4 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.
No tienes permisos para ver links. Registrate o Entra con tu cuenta

Desconectado sr.mcbecker

  • *
  • Underc0der
  • Mensajes: 14
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • *sinrevelar!
    • Email
« Respuesta #5 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!

 

¿Te gustó el post? COMPARTILO!



Creando un entorno de trabajo para MongoDB y Django

Iniciado por Sanko

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