首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道MySQLnd是否是活动的驱动程序?

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

Stack Overflow用户
提问于 2009-09-25 06:20:55
回答 6查看 44.7K关注 0票数 59

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

我怎样才能知道它MySQLnd是否是激活的驱动程序?

我运行的是PHP5.3和MySQL 5.1.37。在phpinfo()中列出了mysqlnd,但只有这样我才不能确定我使用的是MySQLnd还是旧的驱动程序……

提取phpinfo()输出

代码语言:javascript
复制
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...

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-09-25 08:03:00

警告!此方法不可靠,从PHP8.1起不起作用

如果你是通过mysqli访问的,这应该能起到作用:

代码语言:javascript
复制
<?php
$mysqlnd = function_exists('mysqli_fetch_all');

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

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

代码语言:javascript
复制
if (strpos($pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), 'mysqlnd') !== false) {
    echo 'PDO MySQLnd enabled!';
}
票数 61
EN

Stack Overflow用户

发布于 2014-03-19 15:40:14

检查mysqli_fetch_all并不能真正说明你是否在使用mysqlnd。相反,它显示您已经启用了mysqli extension

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

mysql扩展、mysqli扩展和PDO MySQL driver可以分别配置为使用libmysqlclient或mysqlnd

这段代码:

代码语言:javascript
复制
<?php
$mysqlnd = function_exists('mysqli_fetch_all');

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

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

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

代码语言:javascript
复制
<?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 provides three additional functions that work only when mysqlnd is used as the driver

最后,PDO check需要首先定义$pdo变量。

代码语言:javascript
复制
$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>';
}
?>
票数 43
EN

Stack Overflow用户

发布于 2009-09-25 06:43:59

驱动程序(libmysql或mysqlnd)是在编译时选择的,对于mysql、mysqli和pdo_mysql,可以分别指定这两个驱动程序。

以下是与mysqlnd对应的三个配置选项:

代码语言:javascript
复制
  --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的"Client API version“都是”mysqlnd5.0.5-dev“。

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

对于PDO,您已经安装了MySQL驱动程序--并且该驱动程序是基于mysqlnd编译的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1475701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档