Подтвердить что ты не робот

Как узнать, является ли 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...

4b9b3361

Ответ 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!';
}

Ответ 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.

Лучший способ проверить mysqli с mysqlnd 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>';
}
?>

Ответ 3

Драйвер (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]


В вашем случае "версия клиентского API" является "mysqlnd 5.0.5-dev" для mysql, mysqli и pdo_mysql.

Итак, кажется, вы используете mysqlnd в трех случаях.

В случае PDO у вас установлен драйвер MySQL, и этот файл скомпилирован на основе mysqlnd.

Ответ 4

Это то, что я искал

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

Ответ 5

Возможно, проверьте, существуют ли эти параметры? По какой-то причине phpinfo() по-разному отличает их от других настроек ini. Работает на 5.4, не уверен в 5.3.

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

Ответ 6

phpinfo() в начале перечисляет "команду Configure", используемую для компиляции PHP.

Как указано в других ответах, mysqlnd имеет значение 1 (по умолчанию) из 2 вариантов во время процесса установки/компиляции php.

Моя команда конфигурирования phpinfo для 7.0.33:

'./configure' '--prefix =/opt/php70' '--with-libdir = lib64' '--enable-bcmath' '--enable-calendar' '--enable-dbase' '--enable- exif '' --enable-ftp '' --enable-gd-native-ttf '' --enable-intl '' --enable-libxml '' --enable-mbstring '' --enable-pdo '' - -enable-soap '' --enable-sockets '' --enable-sqlite-utf8 '' --enable-wddx '' --enable-zip '' --with-bz2 '' --with-curl '' --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-sock =/var/lib/mysql/mysql.sock '' --with-mysqli =/usr/bin/mysql_config '' --with-openssl '' --with-pdo-mysql =/usr '' - -with-pdo-pgsql =/usr '' --with-pgsql =/usr '' --with-pdo-sqlite '' --with-png-dir '' --with-pspell '' --with- sqlite '' --with-system-tzdata '' --with-tidy '' --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

(Я знаю, что это уже давно, но это знание спасло бы меня от долгих споров по технической поддержке, и я увидел это первым.)