mysqli、PDO_MySQL といった PHP 拡張モジュールは、
どれも C クライアントライブラリの軽量なラッパーです。これらの拡張モジュールは、
mysqlnd ライブラリあるいは libmysqlclient
ライブラリのいずれかを使えます。どちらを使うのかを決めるのは、コンパイル時です。
mysqlnd ライブラリは、PHP の一部として配布されています。 遅延接続やクエリのキャッシュなど、libmysqlclient にはない機能も搭載されているので、 この mysqlnd ライブラリを使うことを強くおすすめします。 mysqlnd のドキュメント には、さらなる詳細情報や機能一覧があります。
例1 mysqlnd あるいは libmysqlclient を使う場合の configure コマンド
// おすすめの方法。mysqlnd を使ってコンパイルします。 $ ./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd // もうひとつのおすすめの方法。mysqlnd を使ってコンパイルします。 $ ./configure --with-mysqli --with-pdo-mysql // おすすめしない方法。libmysqlclient を使ってコンパイルします。 $ ./configure --with-mysqli=/path/to/mysql_config --with-pdo-mysql=/path/to/mysql_config
ライブラリの機能比較
mysqlnd を使うほうが、 MySQL Client Server library (libmysqlclient) よりもおすすめです。 どちらのライブラリも、開発が続いています。
| MySQL Native Driver (mysqlnd) | MySQL クライアントサーバーライブラリ (libmysqlclient) |
|
|---|---|---|
| PHP の配布物に同梱 | Yes | No |
| どのバージョンの PHP から使えるか | 5.3.0 | N/A |
| ライセンス | PHP License 3.01 | デュアルライセンス |
| 開発状況 | 進行中 | 進行中 |
| ライフサイクル | 終了予定なし | 終了予定なし |
| コンパイルのデフォルト (すべての MySQL 拡張モジュール) | Yes | No |
| 圧縮プロトコルへの対応 | Yes | Yes |
| SSL への対応 | Yes | Yes |
| 名前付きパイプへの対応 | Yes | 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 |
| 自動再接続 | No | オプション |