¿Cómo saber si MySQLnd es el controlador activo?

Quizás sea una pregunta obvia, pero quiero estar seguro.

¿Cómo puedo saber si MySQLnd es el controlador activo?

Estoy ejecutando PHP 5.3 y MySQL 5.1.37. En phpinfo () aparece mysqlnd pero solo con esto no puedo estar seguro de si estoy usando MySQLnd o el controlador anterior …

Extracto de salida phpinfo ()

mysql MySQL Support enabled Active Persistent Links 0 Active Links 0 Client API version mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ mysqli MysqlI Support enabled Client API library version mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ Active Persistent Links 0 Inactive Persistent Links 0 Active Links 26 mysqlnd mysqlnd enabled Version mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ PDO PDO support enabled PDO drivers mysql pdo_mysql PDO Driver for MySQL enabled Client API version mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ 

Estoy usando PDO, y el controlador de PDO dice mysql …

Esto debería funcionar:

  

Para detectar si es el controlador PDO activo, cree su objeto MySQL PDO y luego:

 if (strpos($pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), 'mysqlnd') !== false) { echo 'PDO MySQLnd enabled!'; } 

La comprobación de mysqli_fetch_all realmente no describe si estás usando mysqlnd . Por el contrario, dice que tiene la extensión mysqli habilitada.

MySQLi es simplemente una versión actualizada de la extensión mysql que se proporcionó en versiones anteriores de PHP.

La extensión mysql , la extensión mysqli y el PDO MySQL driver pueden configurarse individualmente para usar libmysqlclient o mysqlnd

Este código:

  

no hacer eco de nada sugiere que no tiene comstackdo / habilitado / instalado mysqli, y podría estar usando la antigua extensión mysql .

Una mejor forma de verificar mysqli con mysqlnd vs mysql con libmysqlclient es hacer esto:

 is installed.
"; } else { echo "- MySQL is not installed.
"; } if (function_exists('mysqli_connect')) { echo "- MySQLi is installed.
"; } else { echo "- MySQLi is not installed.
"; } if (function_exists('mysqli_get_client_stats')) { echo "- MySQLnd driver is being used.
"; } else { echo "- libmysqlclient driver is being used.
"; }

Esto funciona porque mysqlnd proporciona tres funciones adicionales que funcionan solo cuando se usa mysqlnd como el controlador .

Finalmente, la verificación PDO necesita tener la variable $pdo definida primero.

 $dbHost = "localhost"; $dbUser = "root"; $dbPass = "password"; $dbName = "database"; $pdo = new PDO('mysql:host='.$dbHost.';dbname='.$dbName, $dbUser, $dbPass); if (strpos($pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), 'mysqlnd') !== false) { echo '- PDO MySQLnd is enabled.
'; } else { echo '- PDO MySQLnd is not enabled.
'; } ?>

El controlador (libmysql o mysqlnd) se elige en tiempo de comstackción, y cada uno de esos dos se puede especificar de forma independiente para mysql, mysqli y pdo_mysql.

Estas son las tres opciones de configuración que corresponden a mysqlnd:

  --with-mysql[=DIR] Include MySQL support. DIR is the MySQL base directory. If mysqlnd is passed as DIR, the MySQL native driver will be used [/usr/local] --with-mysqli[=FILE] Include MySQLi support. FILE is the path to mysql_config. If mysqlnd is passed as FILE, the MySQL native driver will be used [mysql_config] --with-pdo-mysql[=DIR] PDO: MySQL support. DIR is the MySQL base directoy If mysqlnd is passed as DIR, the MySQL native native driver will be used [/usr/local] 

En su caso, la “versión de API de cliente” es “mysqlnd 5.0.5-dev” para mysql, mysqli y pdo_mysql.

Entonces parece que estás usando mysqlnd en cualquiera de los tres casos.

En el caso de PDO, tiene instalado el controlador MySQL, y ese está comstackdo en base a mysqlnd.

Esto es lo que estaba buscando

  

Tal vez comprobar si existen estas configuraciones ? phpinfo () los representa de manera diferente a otras configuraciones ini por alguna razón. Funciona para 5.4, no estoy seguro de 5.3.

 ini_get('mysqlnd.debug') !== false