Informática

PDO o MySQLi (para app implementada en PHP)

25 mayo, 2017
pdo-o-mysqli

En cualquier aplicación implementada en PHP que requiera de acceso a una base de datos, podremos utilizar dos procedimientos principalmente: el manejo de MySQLi, en su variante de programación orientada a objetos o en la variante de programación estructurada, y el uso de la clase PDO (PHP Data Object) que proporciona una capa de abstracción de acceso a datos.

Ambos procedimientos están implementados en las últimas versiones de PHP y no podrán ser utilizados en versiones de PHP anteriores a PHP 5.0.

Para hacer una comparativa entre ambas opciones nos centraremos en los siguientes apartados:

 

  • API

Tanto PDO como MySQLi ofrecen una API orientada a objetos, pero MySQLi también ofrece una API mediante programación estructurada, cosa que resulta ventajosa si no estás familiarizado con la POO.

  • Conexión

La implementación de la conexión con cualquiera de las dos opciones es bastante sencilla:

// PDO

$pdo = new PDO(«mysql:host=localhost;dbname=database», ‘username’, ‘password’);

// mysqli, mediante programación estructurada

$mysqli= mysqli_connect(‘localhost’,’username’,’password’,’database’);

// mysqli, mediante POO

$mysqli = new mysqli(‘localhost’,’username’,’password’,’database’);

Como se pude observar en todos las conexiones debemos de establecer el nombre del servidor, el nombre de la base de datos, el usuario y la contraseña, pero en la sentencia de conexión mediante PDO además se establece el parámetro “mysql” que indica la base de datos que vamos a utilizar, mientras que en las dos opciones de mysqli no se indica, puesto que esas opciones sólo son válidas para una base de datos mysql.

  • Bases de datos soportadas

Como comentábamos antes la extensión MySQLi sólo soporta bases de datos MySQL, mientras que PDO soporta más de 12 drivers diferentes de bases de datos. Para obtener un listado de todos los drivers de bases de datos que soporta PDO basta con utilizar la siguiente línea de código:

var_dump( PDO::getAvailableDrivers() );

Como se puede imaginar, esta es un condicionante importante para decantarnos por el sistema de conexión PDO, puesto que para cambiar de sistema gestor de base de datos bastará con indicar en los parámetros de conexión la base de datos que vayamos a utilizar.

  • Seguridad

Ambos métodos establecen procedimientos de seguridad ante ataques de SQL, pero el funcionamiento de la sentencia prepare de la clase PDO además de escapar valores aporta otros mecanismos de seguridad que hacen de su uso un funcionamiento más eficiente. Mediante MySQLi podríamos utilizar la función mysqli_real_scape_string para escapar valores, pero necesitaríamos de otros recursos para conseguir una implementación tan eficiente como la ofrecida por el método prepare de la clae PDO.

  • Parámetros con nombre

El manejo de parámetros con nombre es una funcionalidad que implementa la clase PDO y que no es posible mediante las conexiones MySQLi. Un ejemplo des está práctica podría ser el siguiente:

$parametros = array(‘:usuario’ => ‘prueba’, ‘:email’ => $mail);

$pdo->prepare(‘SELECT * FROM users

WHERE username = :usuario

AND email = :email);

$pdo->execute($parametros);

Con MySQLi deberíamos de usar el parámetro de interrogación y seguir el mismo orden de los parámetros en todo momento. Un ejemplo de esta práctica sería el siguiente:

$query = $mysqli->prepare(‘

SELECT * FROM users

WHERE username = ?

AND email = ?)

$query->bind_param(‘ttt’, ‘prueba’, $mail);

$query->execute();

  • Rendimiento

Ambos mecanismos de conexión son bastante rápidos, sin embargo se han realizado estudios de rendimiento que indican que el manejo de la conexión MySQLi es ligeramente más rápido que el uso de la clase PDO. Ciertamente esas diferencias de velocidad son despreciable para la mayoría de los mortales, aunque si tu proyecto desea dar la mayor relevancia a está característica quizás debas de plantearte el manejo de MySQLi aunque dejes de lado el resto de ventajas aportadas por la clase PDO.

Vistas todas estas propiedades que diferencian a los métodos de conexión por medio de la extensión MySQLi y por medio de la clase PDO parece que PDO aporta más beneficios que la extensión MySQLi, pero al quedarse algo coja en velocidad dependerá de los objetivos de vuestras aplicaciones la opción de la conexión a utilizar.


SEAS Estudios Superiores Abiertos. Solicita información.Si interesa la programación y te ha gustado este artículo de nuestro profesor Germán Romeo, recuerda que puedes seguir ampliando tus conocimientos con nuestro Curso online de PHP. Solicita información sin compromiso.

    Deja un comentario

    Información básica acerca de cómo protegemos tus datos conforme al Reglamento General de Protección de Datos
    (Reglamento UE 2016/679)

    De conformidad con lo establecido en el Reglamento General de Protección de Datos, te informamos de:
    - Quién es el responsable del tratamiento: SEAS, Estudios Superiores Abiertos S.A.U. C/Violeta Parra nº 9 50015
    Zaragoza (España).
    - Cuál es el fin del tratamiento: Gestión y control de los comentarios del blog de SEAS.
    - En qué basamos la legitimación: En tu consentimiento.
    - La comunicación de los datos: No se comunicarán tus datos a terceros.
    - Los criterios de conservación de los datos: Se conservarán mientras exista interés mutuo para mantener el fin del
    tratamiento o por obligación legal. Cuando dejen de ser necesarios, procederemos a su destrucción.
    - Los derechos que te asisten:
    (i) Derecho de acceso, rectificación, portabilidad y supresión de sus datos y a la limitación u oposición al tratamiento
    (ii) derecho a retirar el consentimiento en cualquier momento y (iii) derecho a presentar una reclamación ante
    la autoridad de control (AEPD).
    - Los datos de contacto para ejercer tus derechos: SEAS, Estudios Superiores Abiertos S.A.U. C/ Violeta Parra nº 9 –
    50015 Zaragoza (España) o través de correo electrónico a lopd@estudiosabiertos.com
    - También puedes ponerte en contacto con nuestro Delegado de Protección de Datos en dpd@estudiosabiertos.com

     

    Información adicional: Puedes consultar la información adicional y detallada sobre nuestra política de privacidad