たぶんそれは明らかな質問ですが、私は確かにしたいです。
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 extension が有効になっていると書かれています。
MySQLiは、以前のバージョンのPHPで提供されていたmysql
拡張機能の更新バージョンです。
mysql
拡張、mysqli
拡張、およびPDO MySQL driver
はそれぞれ、libmysqlclientまたはmysqlndを使用するように個別に構成できます。
このコード:
<?php
$mysqlnd = function_exists('mysqli_fetch_all');
if ($mysqlnd) {
echo 'mysqlnd enabled!';
}
何もエコーしないということは、mysqliをコンパイル/有効化/インストールしておらず、古いmysql
拡張を使用している可能性があることを示しています。
Libmysqlclientでmysqlndと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>";
}
mysqlndは、mysqlndがドライバーとして使用される場合にのみ機能する3つの追加機能を提供する であるため、機能します。
最後に、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)はコンパイル時に選択され、これら2つのそれぞれは、mysql、mysqli、およびpdo_mysqlに対して個別に指定できます。
Mysqlndに対応する3つの構成オプションを以下に示します。
--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の両方の「クライアントAPIバージョン」は「mysqlnd 5.0.5-dev」です。
したがって、いずれかの3つのケースでmysqlndを使用しているようです。
PDOの場合、MySQLドライバーがインストールされており、そのドライバーはmysqlndに基づいてコンパイルされています。
これは私が探していたものです
<?php
if (extension_loaded('mysqlnd')) {
}
?>
これらの設定 が存在するかどうかを確認しますか? phpinfo()は、何らかの理由で他のini設定とは異なる方法でレンダリングします。 5.3についてはわかりませんが、5.4で動作します。
ini_get('mysqlnd.debug') !== false
冒頭のphpinfo()は、PHPのコンパイルに使用される「Configure Command」をリストしています。
彼らは他の答えで述べているように、mysqlndはphpのインストール/コンパイルプロセス中に2つの選択肢のうち1(デフォルト)です。
7.0.33のphpinfo Configureコマンドは次のとおりです。
「./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を使用していることを意味するディレクトリを指している.
詳細については http://php.net/manual/en/mysqlinfo.library.choosing.php
(私はこれがかなり古いことを知っていますが、この知識は技術サポートの議論の時間を節約してくれ、最初にこれを見ました。)