Las extensiones PHP mysqli y PDO_MySQL son envolventes ligeras de una
biblioteca cliente C. Las extensiones pueden utilizar la biblioteca
mysqlnd, o la biblioteca libmysqlclient
.
La elección de la biblioteca se realiza en el momento de la compilación.
La biblioteca mysqlnd forma parte de la distribución de PHP. Ofrece funcionalidades como conexiones perezosas, caché de consultas, que no están disponibles con libmysqlclient, por lo que se recomienda utilizar la biblioteca interna mysqlnd. Ver la documentación de mysqlnd para obtener más información, así como una lista de las funcionalidades que ofrece.
Ejemplo #1 Comando de configuración para el uso de mysqlnd o libmysqlclient
// Recomendado, compilación con mysqlnd $ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd // Alternativamente recomendado, compilación con mysqlnd $ ./configure --with-mysqli --with-pdo-mysql // No recomendado, compilación con libmysqlclient $ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysql_config
Ejemplo #2 Comparación de las instrucciones preparadas
<?php
// mysqli
$mysqli = new mysqli("example.com", "usuario", "contraseña", "base de datos");
$statement = $mysqli->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$result = $statement->get_result();
$row = $result->fetch_assoc();
echo htmlentities($row['District']);
// PDO
$pdo = new PDO('mysql:host=example.com;dbname=base de datos', 'usuario', 'contraseña');
$statement = $pdo->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['District']);
Comparación de funcionalidades de las bibliotecas
Se recomienda utilizar la biblioteca mysqlnd en lugar de la biblioteca cliente servidor MySQL (libmysqlclient). Ambas bibliotecas son soportadas y mejoradas continuamente.
Driver nativo MySQL (mysqlnd) | Biblioteca cliente servidor MySQL (libmysqlclient ) |
|
---|---|---|
Forma parte de la distribución de PHP | Sí | No |
Introducido en versión de PHP | 5.3.0 | N/A |
Licencia | Licencia PHP 3.01 | Doble licencia |
Estado de desarrollo | Activo | Activo |
Ciclo de vida | Sin fin anunciado | Sin fin anunciado |
Compilado por defecto (para todas las extensiones MySQL) | Sí | No |
Soporte del protocolo de compresión | Sí | Sí |
Soporte de SSL | Sí | Sí |
Soporte de pipes nombrados | Sí | Sí |
Consultas no bloqueantes, asíncronas | Sí | No |
Estadísticas de rendimiento | Sí | No |
LOAD LOCAL INFILE respeta la directiva open_basedir | Sí | No |
Uso del sistema de gestión de memoria nativo de PHP (es decir, sigue los límites de memoria de PHP) | Sí | No |
Devuelve las columnas numéricas en forma de double (COM_QUERY) | Sí | No |
Devuelve las columnas numéricas en forma de string (COM_QUERY) | Sí | Sí |
API del plugin | Sí | Limitada |
Reconexión automática | No | Opcional |