Mysqli
PHP Manual

Información general

Esta sección proporciona una introducción a las opciones disponibles a la hora de desarrollar una aplicación PHP que necesite interactuar con una base de datos MySQL.

¿Qué es una API?

Una Interfaz de Programación de Aplicaciones, o API, define las clases, métodos, funciones y variables que necesitará llamar una aplicación para llevar a cabo una tarea determinada. En el caso de las aplicaciones de PHP que necesitan comunicarse con un servidor de bases de datos, las APIs necesarias se ofrecen generalmente en forma de extensiones de PHP.

Las APIs pueden ser procedimentales u orientadas a objetos. Con una API procedimental invocan funciones para llevar a cabo las tareas, mientras con con una API orientada a objetos se instancian clases, y entonces se invocan a métodos de los objetos creados. Entre ambas opciones, la segunda es generalmente la vía recomendada, puesto que está más actualizada y conlleva una mejor organización de código.

Cuando se escriben aplicaciones PHP que necesitan conectar a un servidor MySQL, existen varias opciones disponibles respecto a API. Este documento abarca esas opciones, y ayuda a elegir la mejor solución para cada aplicación.

¿Qué es un Conector?

En la documentación de MySQL, el término conector hace referencia al software que permite a una aplicación conectarse a un servidor de bases de datos MySQL. MySQL proporciona conectores para ciertos lenguajes, entre ellos PHP.

Si una aplicación de PHP necesita comunicarse con un servidor de bases de datos, necesitará escribir el código PHP que realice tareas tales como conectar al servidor de bases de datos, realizar consultas y otras funciones relacionadas con bases de datos. Es necesario tener un software instalado en el sistema que proporcione a la aplicación en PHP la API, que manejará la comunicación entre el servidor de bases de datos y la aplicación, posiblemente empleando en caso necesario otras bibliotecas. A este software generalmente se le conoce como conector, dado que permite a una aplicación conectar con un servidor de bases de datos.

¿Qué es un Driver?

Un driver es un software diseñado para comunicarse con un tipo específico de servidor de bases de datos. Podría también invocar a una biblioteca, como por ejemplo la Biblioteca Cliente de MySQL o el Driver Nativo de MySQL. Estas bibliotecas implementan el protocolo de bajo nivel que se utiliza para comunicarse con el servidor de bases de datos.

A modo de ejemplo, la capa de abstracción de bases de datos Objetos de Datos de PHP (PDO) utilizará alguno de los drivers para bases de datos disponibles. Uno de ellos es el driver PDO MYSQL, que permite comunicarse con un servidor MySQL.

A menudo la gente utiliza los términos conector y driver indistintamente. Esto puede dar lugar a confusión. En la documentación de MySQL, el término "driver" queda reservado para el software que proporciona la parte específica de una base de datos dentro de un conector.

¿Qué es una Extensión?

En la documentación de PHP aparece otro término - extensión. El código fuente de PHP consiste por un lado de un núcleo, y por otro de extensiones opcionales para el núcleo. Las extensiones de PHP relacionadas con MySQL, tales como mysqli, y mysql, están implementadas utilizando el framework de extensiones de PHP.

Típicamente, una extensión ofrece una API al programador de PHP para permitirle hacer uso de sus utilidades mediante código. Sin embargo, algunas de las extensiones que utilizan el framework de extensiones de PHP no ofrecen ninguna API al programador.

La extensión del driver PDO MySQL, por ejemplo, no proporciona ninguna API al programador PHP, pero en su lugar ofrece una interfaz a la capa de PDO que tiene por encima.

No deben confundirse los términos API y extensión, dado que una extensión no debe necesariamente proporcionar una API al programador.

¿Cuáles son las principales APIs que PHP ofrece para utilizar MySQL?

Hay tres APIs principales a la hora de considerar conectar a un servidor de bases de datos MySQL:

Cada una tiene sus ventajas e inconvenientes. El siguiente apartado trata de dar una breve introducción a los aspectos clave de cada API.

¿Qué es la Extensión MySQL de PHP?

Esta es la extensión original diseñada que permite desarrollar aplicaciones PHP que interactúan con bases de datos MySQL. La extensión mysql proporciona una interfaz procedural, y está pensada para usar sólo con versiones de MySQL anteriores a la 4.1.3. Si bien esta extensión se puede utilizar con versiones de MySQL 4.1.3 o posteriores, no estarán disponibles todas las nuevas funcionalidades del servidor MySQL.

Nota:

Si se utiliza una versión de MySQL 4.1.3 o posterior, se recomienda encarecidamente utilizar la extensión mysqli en su lugar.

El código fuente de la extensión mysql se encuentra en el directorio de extensiones de PHP ext/mysql.

Para más información sobre la extensiónmysql, revise Mysql.

¿Qué es la extensión mysqli de PHP?

La extensión mysqli, o como a veces se le conoce, la extensión de MySQL mejorada, se desarrolló para aprovechar las nuevas funcionalidades encontradas en los sistemas MySQL con versión 4.1.3 o posterior. La extensión mysqli viene incluida en las versiones PHP 5 y posteriores.

La extensión mysqli contiene numerosos beneficios, siendo estas las mejoras principales respecto a la extensión mysql:

Nota:

Si utiliza MySQL versión 4.1.3 o superior, se recomienda encarecidamente utilizar esta extensión.

Además de la interfaz orientada a objetos, esta extensión también proporciona una interfaz procedural.

La extensión mysqli está desarrollada mediante el framework de extensiones de PHP. Su código fuente se ubica en el directorio ext/mysqli.

Para más información sobre la extensión mysqli, revise Mysqli.

¿Qué es PDO?

Los Objetos de Datos de PHP, o PDO, son una capa de abstracción de bases de datos específicas para aplicaciones PHP. PDO ofrece una API homogénea para las aplicaciones PHP, independientemente del tipo de servidor de bases de datos con el que se vaya a conectar la aplicación. En teoría, si se utiliza la API PDO, se podría cambiar el servidor de bases de datos en uso, por ejemplo de Firebird a MySQL, y sólo se necesitarían algunos cambios menores en el código PHP.

Otros ejemplos de capas de abstracción de bases de datos son JDBC para aplicaciones Java o DBI para Perl.

A pesar de que PDO tiene sus ventajas, tales como una API limpia, sencilla y portable, su mayor inconveniente es que no permite utilizar todas las funcionalidades avanzadas en la última versión del servidor MySQL. Por ejemplo, PDO no permite hacer uso de las Declaraciones Múltiples de MySQL.

PDO está desarrollado utilizando el framework de extensiones de PHP. Su código fuente se ubica en el directorio ext/pdo.

Para más información de PDO, revise PDO.

¿Qué es el driver PDO MYSQL?

El driver PDO MYSQL no es una API en sí, al menos desde el punto de vista del programador de PHP. En realidad, el driver PDO MYSQL se encuentra una capa por debajo del propio PDO, y ofrece funcionalidades específicas de MySQL. Si bien el programador realiza las llamadas a la API de PDO, PDO utiliza el driver PDO MYSQL para llevara a cabo la comunicación con el servidor MySQL.

El driver PDO MYSQL es uno de los muchos drivers PDO disponibles. Otros de los drivers disponibles son los de los servidores de bases de datos Firebird y PostgreSQL.

El driver MYSQL PDO está desarrollado utilizando el framework de extensiones de PHP. Su código fuente está ubicado en el directorio ext/pdo_mysql. No ofrece ninguna API al programador PHP.

Para más información sobre el driver PDO MYSQL, revise MySQL (PDO).

¿Qué es el Driver Nativo de MySQL?

Tanto la extensión mysql, como mysqli, y el driver PDO MYSQL, utilizan para llevar a cabo las comunicaciones con el servidor de bases de datos MySQL una biblioteca de bajo nivel que genera el protocolo necesario. Hace un tiempo, la única biblioteca disponible era libmysql.

Sin embargo, la interfaz que ofrece libmysql no estaba optimizada para comunicarse con aplicaciones PHP, dado que libmysql se desarrolló originalmente teniendo en mente aplicaciónes hechas en C. Por esta razón, se desarrolló el Driver Nativo de MySQL, mysqlnd, como una alternativa a libmysql para las aplicaciones en PHP.

Tanto la extensión mysql, como la extensión mysqli y el driver PDO MySQL, se pueden configurar por separado para utilizar o bien libmysql o bien mysqlnd. Dado que mysqlnd fue desarrollado específicamente para ser utilizado en sistemas PHP, tiene numerosas mejoras en cuanto a uso de memoria y velocidad respecto a libmysql. Se recomienda encarecidamente hacer uso de dichas mejoras.

Nota:

El Driver Nativo de MySQL sólo puede usarse con servidores MySQL.

El Driver Nativo de MySQL está desarrollado utilizando el framework de extensiones de PHP. El código fuente se ubica en ext/mysqlnd. No ofrece ninguna API al programador de PHP.

Comparación de Funcionalidades

La siguiente tabla compara las funcionalidades de los tres principales métodos para conectar a MySQL desde PHP:

Comparación de las opciones de la API de MySQL para PHP
  Extensión mysqli de PHP PDO (Usando el driver PDO MySQL y el Driver Nativo MySQL) Extensión MySQL de PHP
Versión de PHP en que se introdujo 5.0 5.0 Antes de 3.0
Incluído con PHP 5.x
Estado de desarrollo de MySQL Desarrollo activo Desarrollo activo, desde PHP 5.3 Sólo se le mantiene
Recomendado por MySQL para nuevos proyectos Sí - opción recomendada No
Soporte para juegos de caracteres No
Soporte para Declaraciones Preparadas en el lado del servidor No
Soporte para Declaraciones Preparadas en el lado del cliente No No
Soporte para Procedimientos Almacenados No
Soporte para Declaraciones Múltiples Mayormente No
Suporte para todas las funcionalidades de MySQL 4.1+ Mayormente No

Mysqli
PHP Manual