如何知道是否MySQLnd是活动的驱动程序?(How to know if MySQLnd is t

2019-07-19 14:01发布

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

我怎么能知道,如果它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的...

Answer 1:

这应该做的伎俩:

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

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

为了检测其是否有效PDO驱动程序,创建你的MySQL PDO对象,则:

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


Answer 2:

检查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!';
}

不附和没有迹象表明你没有的mysqli编译/启动/安装,并且可能使用的是旧mysql扩展。

一个更好的方法来检查与mysqlnd的mysqli VS MySQL搭配的libmysqlclient是做到这一点:

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


Answer 3:

驾驶员(或的libmysql mysqlnd)在编译时被choosen,并且这两个中的每一个可以independatly为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]


在你的情况下, “客户端API版本” 是 “mysqlnd 5.0.5-dev的” 两个MySQL中,mysqli的,和PDO_MYSQL。

因此,看来你ahre在任3案件使用mysqlnd。

在PDO的情况下,你已经安装了MySQL驱动程序 - 这是一个基于mysqlnd编译。



Answer 4:

这就是我一直在寻找

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


Answer 5:

也许检查这些设置存在吗? phpinfo()函数使得它们不同于出于某种原因其他INI设置。 适用于5.4,不知道5.3。

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


Answer 6:

phpinfo()函数在一开始列出了用于编译PHP的“配置命令”。

因为它们在其他的答案状态mysqlnd是1 PHP的安装/编译过程中的2种选择(默认值)。

我的phpinfo配置命令7.0.33是:

'的./configure' '前缀= /选择/ php70' '--with-LIBDIR = lib64下' '--enable-bcmath时' '--enable-日历' '--enable-质数据库'“--enable- EXIF '--enable-ftp的'--enable-GD-本地-TTF'--enable-国际'--enable-libxml的 '--enable-MBSTRING' '--enable-PDO'' - -enable皂 ' '--enable-插座' '--enable-源码-UTF8' '--enable-WDDX' '--enable拉链' '--with-BZ2' '--with卷曲'' --with-freetype的-DIR ' '--with-GD' '--with-gettext的' '--with-GMP' '--with-IMAP' '--with-IMAP-SSL'' --with- JPEG-DIR = / USR ' '--with-的Kerberos' '--with-mcrypt的' '--with-mhash' '--with-MSSQL' '--with-的MySQL = / USR'' --with-的MySQL-袜子=的/ var / lib中/ MySQL的/的mysql.sock ' '--with-的mysqli =的/ usr /斌/ mysql_config' '--with-OpenSSL的' '--with-PDO-的MySQL = / USR'' - -with-PDO-的pgsql = / USR ' '--with-的pgsql = / USR' '--with-PDO-源码' '--with-PNG-DIR' '--with-pspell'' --with-源码” '--with系统用的tzdata' '--with-整齐' '--with-的unixODBC' '--with-XMLRPC' '--with-XSL' '--with-zlib的'

注意--with-mysqli的=的/ usr / bin中/ mysql_config”'

和--enable-mysqlnd”'(未在此一个,但在5.6 PHP版本的读出)

--with-mysqli的=指向一个目录它使用的libmysqlclient如果有人mysqlnd而不是那么它使用本地驱动程序的意义。

有关此更多信息http://php.net/manual/en/mysqlinfo.library.choosing.php

(我知道这是老办法然而这方面的知识将有救了我的技术支持辩论的时间,我第一次看到这一点。)



文章来源: How to know if MySQLnd is the active driver?