Возможно, это очевидный вопрос, но я хочу быть уверенным.
Как я могу узнать, является ли 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 …
Это должно сделать трюк:
<?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!'; }
Проверка 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
расширение 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
переменную $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>'; } ?>
Драйвер (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.
Это то, что я искал
<?php if (extension_loaded('mysqlnd')) { } ?>
Возможно, проверьте, существуют ли эти настройки ? По какой-то причине phpinfo () по-разному отличает их от других настроек ini. Работает на 5.4, не уверен в 5.3.
ini_get('mysqlnd.debug') !== false