¿Cuál es la diferencia entre PDO y MySQLi?

Si me decís que estás desarrollando una aplicación web usando PHP y no me das más datos, cerrando los ojos diría que estás usando una base de datos MySQL y, seguro que en el 80% de los casos acertaría.

Es un hecho: PHP y MySQL son un dúo muy común en este mundillo.

Lo que no está tan definido es cuál es el mejor modo de conectarse a MySQL utilizando PHP.

A priori destacan dos:

Ambos pueden usarse para armar CRUDs, reportes y cualquier otra necesidad que implique comunicar una aplicación PHP con una base de datos MySQL.

Entonces… ¿cómo elegir?

Para hacerte (algo) más fácil la tarea te voy a comentar brevemente de qué se trata cada uno.

Qué es MySQLi

MySQLi es una extensión de PHP creada con el propósito de facilitar la comunicación entre un script PHP y un servidor MySQL.

Es la heredera de la vieja y querida extensión MySQL que ya ha quedado obsoleta.

MySQLi hizo su aparición junto con la versión 4.1 de MySQL.

Lo más probable es que nunca te cruces con un servidor que utiliza una versión anterior (Al día en que estoy escribiendo este artículo la versión de MySQL es la 8.0) pero… si llegara a pasar, vas a tener que arreglártelas con la extensión mysql (sin la «i»).

Su nombre precisamente viene de MySQL improved (Mejorada).

Una característica interesante de esta extensión es que muestra una API Orientada a Objetos y también una estructurada.

Por ejemplo, para establecer una conexión a un servidor podés usar tanto:

<?php
$link = mysqli_connect("localhost", "root", "", "mydb");

Como

<?php
$mysqli = new mysqli('localhost', 'root', '', 'mydb');

Si estás migrando un sistema que usaba la vieja extensión y no tenés mucho tiempo para hacer grandes cambios es trivial actualizar al uso de la nueva librería: basta agregar una «i» al nombre de las funciones que venías usando.

Claro que, si querés dar un salto, te recomiendo hacer el esfuerzo de escribir el código usando objetos.

Qué es PDO

PDO también es una extensión pero, a diferencia de MySQLi, PDO está diseñada como una capa de abstracción sobre una amplia cantidad de motores específicos.

Para que se entienda mejor, esta es la relación entre PDO y los motores específicos:

Cuál es la ventaja de usar PDO en lugar de MySQLi

La ventaja principal de usar PDO en lugar de MySQLi es que, llegado el caso de decidir migrar a un motor de base de datos diferente del elegido originalmente, el cambio es trivial.

Por ejemplo, si tuvieses que pasar de MySQL a SqlServer deberías cambiar:

$conn = new PDO('mysql:dbname=mydb;host=127.0.0.1');

Por

$conn = new PDO('mssql:dbname=mydb;host=127.0.0.1');

Y el resto de tu código seguiría funcionando sin alteraciones.

Cuál es la ventaja de usar MySQLi en lugar de PDO

Pero si PDO es tan potente y versátil… ¿no hay lugar para MySQLi en la actualidad?

La verdad es que sí lo hay (a diferencia de lo que muchos creen).

La versatilidad de PDO es un arma de doble filo.

Como sucede con cualquier solución genérica, quien mucho abarca poco aprieta 🙂

En términos técnicos, lo que ocurre es que PDO no puede aprovechar las pequeñas diferencias existentes entre los diferentes motores, lo cual lo hace menos eficiente que MySQLi en ciertas situaciones.

Por otro lado, una capa más de abstracción agrega más overhead.

Cómo decidir si usar PDO o MySQLi

No quiero que te vayas de aquí con una confusión mayor de la que traías al comienzo, así que preparé este sencillo diagrama de flujo para ayudarte a tomar la decisión, espero te sirva:

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a acceder mercados y clientes más sofisticados y exigentes

1 comentario

  1. Me voy a desahogar aquí ajaja, debido a que bueno yo conozco POO y PHP Puro, actualmente uso PHP Puro y uso más MYSQLi pues porque es lo que se me enseño desde siempre y es lo que más comúnmente usaba mucho, sin embargo me entro una duda debido a que en diferentes proyectos que me he topado descubrí que existían diferentes tipos de motores de bases de datos, como oracle o el mismo SQL por lo tanto quise irme por un PDO usando un solo archivo en vez de hacer 3 archivos distintos para cada conexión y bajar las librerías correspondientes.

    Sin embargo, me siento más comodo usando MYSQLi pero tengo el temor de que el día de mañana MYSQLi quede obsoleto y tenga que cambiar todo a la nueva librería y siento que con PDO eso no sucedería.

    En resumen, las dos son casi iguales sirven para conectar tu proyecto con tu base de datos y el cualquiera que uses está bien. Claramente hay que tomar una decisión en cuanto a versatilidad, mantenimiento y escalabilidad en el proyecto a desarrollar para no tener que hacer muchos retrabajos por una actualización o cambios en librerías.

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.