web-dev-qa-db-ja.com

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を言います...

55

これはトリックを行う必要があります:

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

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

ドライバー(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に基づいてコンパイルされています。

10
Pascal MARTIN

これは私が探していたものです

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

これらの設定 が存在するかどうかを確認しますか? phpinfo()は、何らかの理由で他のini設定とは異なる方法でレンダリングします。 5.3についてはわかりませんが、5.4で動作します。

ini_get('mysqlnd.debug') !== false
3
Bad Habit

冒頭の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

(私はこれがかなり古いことを知っていますが、この知識は技術サポートの議論の時間を節約してくれ、最初にこれを見ました。)

1
JSG