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

2022-08-30 09:39:47

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

我如何知道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...


答案 1

警告!此方法不可靠,自 PHP 8.1 起不起作用

如果您通过 访问,这应该可以解决问题:mysqli

<?php
$mysqlnd = function_exists('mysqli_fetch_all');

if ($mysqlnd) {
    echo 'mysqlnd enabled!';
}

要检测它是否是活动驱动程序,请创建MySQL PDO对象,然后:PDO

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

答案 2

检查 并不能真正描述您正在使用 。相反,它说你启用了mysqli扩展mysqli_fetch_allmysqlnd

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

扩展,扩展和扩展都可以单独配置为使用libmysqlclient或mysqlndmysqlmysqliPDO MySQL driver

此代码:

<?php
$mysqlnd = function_exists('mysqli_fetch_all');

if ($mysqlnd) {
    echo 'mysqlnd enabled!';
}

没有回声任何东西表明你没有编译/启用/安装mysqli,并且可能正在使用较旧的扩展。mysql

使用mysqlnd检查mysqli与使用libmysqlclient检查mysql的更好方法是执行以下操作:

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

$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>';
}
?>

推荐