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

The*_*tor 55 php mysql 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 $ 
Run Code Online (Sandbox Code Playgroud)

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

Ins*_*ire 60

这应该做的伎俩:

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

if ($mysqlnd) {
    echo 'mysqlnd enabled!';
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 看起来我遇到了类似的问题,当我尝试使用getAttribute函数时,我得到了这个错误:在非对象上调用成员函数`getAttribute()`.似乎mysqlnd已启用,但我也不能使用`get_result()`,任何想法? (2认同)

Tim*_*eld 37

检查mysqli_fetch_all并不能说明您使用的是什么mysqlnd.相反,它表示您启用了mysqli扩展.

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

mysql延长,mysqli延伸和PDO MySQL driver可各自被单独地配置为使用的libmysqlclient或mysqlnd

这段代码:

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

if ($mysqlnd) {
    echo 'mysqlnd enabled!';
}
Run Code Online (Sandbox Code Playgroud)

没有回应什么表明你没有编译/启用/安装mysqli,并且可能正在使用旧版mysql扩展.

使用libmysqlclient通过mysqlnd vs mysql检查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>";
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为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>';
}
?>
Run Code Online (Sandbox Code Playgroud)


Pas*_*TIN 10

在编译时选择驱动程序(libmysql或mysqlnd),并且可以为mysql,mysqli和pdo_mysql单独指定这两个驱动程序中的每一个.

以下是与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]
Run Code Online (Sandbox Code Playgroud)


在您的情况下,mysql,mysqli和pdo_mysql的"客户端API版本"是"mysqlnd 5.0.5-dev".

所以看起来你在三种情况下都使用mysqlnd.

在PDO的情况下,您安装了MySQL驱动程序 - 并且该驱动程序是基于mysqlnd编译的.


mik*_*wn2 9

这就是我想要的

<?php
if (extension_loaded('mysqlnd')) {
}
?>
Run Code Online (Sandbox Code Playgroud)

  • mysqlnd可能已加载但尚未被mysql(i)/ pdo_mysql使用 (2认同)