どの API を使うか
コンセプト
MySQL 用 PHP ドライバの概要
PHP Manual

# どのライブラリを選ぶか

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

    // おすすめしない方法。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

どの API を使うか
コンセプト
MySQL 用 PHP ドライバの概要
PHP Manual