どのライブラリを選ぶか

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 オプション