¿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

¿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.