mysqli、PDO_MySQL、そして mysql といった PHP 拡張モジュールは、 どれも C クライアントライブラリの軽量なラッパーです。これらの拡張モジュールは、 mysqlnd ライブラリあるいは libmysqlclient ライブラリのいずれかを使えます。どちらを使うのかを決めるのは、コンパイル時です。
mysqlnd ライブラリは、PHP 5.3.0 以降に組み込まれています。 遅延接続やクエリのキャッシュなど、libmysqlclient にはない機能も搭載されているので、 この mysqlnd ライブラリを使うことを強くおすすめします。 mysqlnd のドキュメント には、さらなる詳細情報や機能一覧があります。
例1 mysqlnd あるいは libmysqlclient を使う場合の configure コマンド
// おすすめの方法。mysqlnd を使ってコンパイルします。 $ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd // もうひとつのおすすめの方法。PHP 5.4 以降で mysqlnd を使ってコンパイルします。 $ ./configure --with-mysqli --with-pdo-mysql --with-mysql // おすすめしない方法。libmysqlclient を使ってコンパイルします。 $ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysql_config --with-mysql=/path/to/mysql_config
ライブラリの機能比較
mysqlnd を使うほうが、 MySQL Client Server library (libmysqlclient) よりもおすすめです。 どちらのライブラリも、開発が続いています。
MySQL ネイティブドライバ (mysqlnd) | MySQL クライアントサーバーライブラリ (libmysqlclient) | |
---|---|---|
PHP の配布物に同梱 | Yes | No |
どのバージョンの PHP から使えるか | 5.3.0 | N/A |
ライセンス | PHP License 3.01 | デュアルライセンス |
開発状況 | 進行中 | 進行中 |
ライフサイクル | 終了予定なし | 終了予定なし |
PHP 5.4 以降でのコンパイルのデフォルト (すべての MySQL 拡張モジュール) | Yes | No |
PHP 5.3 でのコンパイルのデフォルト (すべての MySQL 拡張モジュール) | No | Yes |
圧縮プロトコルへの対応 | Yes (5.3.1+) | Yes |
SSL への対応 | Yes (5.3.3+) | Yes |
名前付きパイプへの対応 | Yes (5.3.4+) | Yes |
ノンブロッキングの非同期クエリ | Yes | No |
パフォーマンス統計 | Yes | No |
LOAD LOCAL INFILE での open_basedir の反映 | Yes | No |
PHP ネイティブのメモリ管理システムを使う (PHP のメモリ制限などに従う) | Yes | No |
数値型のカラムを double 型で返す (COM_QUERY) | Yes | No |
数値型のカラムを string 型で返す (COM_QUERY) | Yes | Yes |
プラグイン API | Yes | Limited |
MySQL Replication での読み書きの分離 | Yes, with plugin | No |
ロードバランシング | Yes, with plugin | No |
フェイルオーバー | Yes, with plugin | No |
遅延接続 | Yes, with plugin | No |
クエリキャッシュ | Yes, with plugin | No |
透過的なクエリ操作 (自動 EXPLAIN あるいはモニタリングなど) | Yes, with plugin | No |
自動再接続 | No | オプション |