如何知道MySQLnd是否是主动的驱动程序?

也许这是一个明显的问题,但我想确定。

我怎么知道MySQLnd是否是主动的驱动程序?

我正在运行PHP 5.3和MySQL 5.1.37。 在phpinfo()mysqlnd列出,但只有这个我不能确定如果我使用MySQLnd或旧的驱动程序…

提取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 $ 

我正在使用PDO,和PDO驱动程序说mysql …

这应该做的伎俩:

 <?php $mysqlnd = function_exists('mysqli_fetch_all'); if ($mysqlnd) { echo 'mysqlnd enabled!'; } 

要检测它是否是活动的PDO驱动程序,请创build您的MySQL PDO对象:

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

检查mysqli_fetch_all并不真正描述你使用的是mysqlnd 。 相反,它说,你有mysqli扩展启用。

MySQLi只是早期版本的PHP提供的mysql扩展的更新版本。

mysql扩展, mysqli扩展和PDO MySQL driver可以分别configuration为使用libmysqlclient或mysqlnd

此代码:

 <?php $mysqlnd = function_exists('mysqli_fetch_all'); if ($mysqlnd) { echo 'mysqlnd enabled!'; } 

不回显没有任何暗示你没有编译/启用/安装mysqli,并可能使用旧的mysql扩展。

用mysqlnd vs mysql和libmysqlclient检查mysqli的更好方法是这样做的:

 <?php if (function_exists('mysql_connect')) { echo "- MySQL <b>is installed</b>.<br>"; } else { echo "- MySQL <b>is not</b> installed.<br>"; } if (function_exists('mysqli_connect')) { echo "- MySQLi <b>is installed</b>.<br>"; } else { echo "- MySQLi <b>is not installed</b>.<br>"; } if (function_exists('mysqli_get_client_stats')) { echo "- MySQLnd driver is being used.<br>"; } else { echo "- libmysqlclient driver is being used.<br>"; } 

这是有效的,因为mysqlnd提供了三个额外的函数,只有当mysqlnd被用作驱动时才起作用 。

最后,PDO检查需要首先定义$pdovariables。

 $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 <b>is enabled</b>.<br>'; } else { echo '- PDO MySQLnd <b>is not enabled</b>.<br>'; } ?> 

驱动程序(libmysql或mysqlnd)是在编译时select的,而这两者中的每一个都可以独立指定为mysql,mysqli和pdo_mysql。

以下是对应于mysqlnd的三个configuration选项:

  --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] 

在你的情况下,对于mysql,mysqli和pdo_mysql,“客户端API版本”是“mysqlnd 5.0.5-dev”。

所以看来你在这三种情况下都使用mysqlnd。

在PDO的情况下,你已经安装了MySQL驱动程序 – 而且是基于mysqlnd编译的。

这是我正在寻找的

 <?php if (extension_loaded('mysqlnd')) { } ?> 

也许检查这些设置是否存在? 由于某种原因,phpinfo()会将它们从其他ini设置中呈现出来。 适用于5.4,不确定约5.3。

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