Elegir una biblioteca

Las extensiones de PHP mysqli, PDO_MySQL y mysql son envolturas ligeras sobre una biblioteca cliente en C. Las extensiones pueden usar la biblioteca mysqlnd o la biblioteca libmysqlclient. Elegir una biblioteca es una decisión que se ha de tomar durante la compilación.

La biblioteca mysqlnd es parte de la distribrución de PHP desde la versión 5.3.0. Ofrece características como conexiones inactivas y caché de consultas, características que no están disponibles con libmysqlclient, por lo que se recomienda encarecedamente usar la biblioteca mysqlnd interna. Véase la documentación de mysqlnd para detalles adicionales y una lista de las características y funcionalidades que ofrece.

Ejemplo #1 Comandos de configuración para usar mysqlnd o libmysqlclient

// Recomendado, compila con mysqlnd
$ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd

// Recomendado como alternativa, compila con mysqlnd a partir de PHP 5.4
$ ./configure --with-mysqli --with-pdo-mysql --with-mysql

// No recomendado, compila con libmysqlclient
$ ./configure --with-mysqli=/ruta/a/mysql_config --with-pdo-mysql=/ruta/a/mysql_config --with-mysql=/ruta/a/mysql_config

Comparación de las características de las bibliotecas

Se recomienda usar la biblioteca mysqlnd en lugar de la biblioteca Cliente Servidor de MySQL (libmysqlclient). Ambas bibliotecas están soportadas y se mejoran constantemente.

  Controlador Nativo de MySQL (mysqlnd) Biblioteca Cliente Servidor de MySQL (libmysqlclient)
Parte de la distribución de PHP No
Versión de PHP donde se introdujo 5.3.0 N/A
Licencia Licencia PHP 3.01 Licencia Dual
Estado de desarrollo Activo Activo
Ciclo de vida Fin no anunciado Fin no anunciado
PHP 5.4 y superior; compilación predeterminada (para todas las extensiones de MySQL) No
PHP 5.3; compilación predeterminada (para todas las extensiones de MySQL) No
Soporte para el protocolo de compresión Sí (5.3.1+)
Soporte para SSL Sí (5.3.3+)
Soporte para tubería con nombre Sí (5.3.4+)
No bloqueo, consultas asíncronas No
Estadísticas de rendimiento No
LOAD LOCAL INFILE respecto a la directiva open_basedir No
Usa el sistema de gestión de memoria nativo de PHP (p.ej., cumple con los límites de memoria de PHP) No
Devuelve columnas numéricas como valores de tipo double (COM_QUERY) No
Devuelve columnas númericas como valores de tipo string (COM_QUERY)
API de complementos Limitada
Separación de lectura/escritura para la Replicación de MySQL Sí, con complemento No
Equilibrado de carga Sí, con complemento No
Tolerancia a fallos Sí, con complemento No
Conexiones inactivas Sí, con complemento No
Caché de consultas Sí, con complemento No
Manipulación transparente de consultas (p.ej., auto-EXPLAIN o monitorización) Sí, con complemento No