如何知道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检查需要首先定义$pdo
variables。
$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