# 概要

何ではないか

MySQL Native Driver は PHP の拡張モジュールとして作られていますが、 PHP を使って開発をする人たちに新しい API を提供するものではないことに注意しましょう。 MySQL データベースに接続するための API を提供するのは、 MySQL 拡張モジュールや mysqli そして PDO MYSQL です。これらの拡張モジュールが、MySQL Native Driver を使って MySQL サーバーと通信できるようになったということです。 したがって、MySQL Native Driver を新たな API と考えてはいけません。

使うべき理由

MySQL Native Driver には、 MySQL Client Library に比べて数多くの利点があります。

旧来の MySQL Client Library は MySQL AB (現在の Oracle Corporation) が書いたものであり、MySQL ライセンスのもとでリリースされていました。 それが原因で、最終的には PHP がデフォルトで MySQL をサポートしないようになったのです。 しかし MySQL Native Driver は PHP プロジェクトの一部として開発されており、 PHP ライセンスのもとでリリースされています。 これで、かつて存在したライセンス問題も解決しました。

また、かつては MySQL データベース用の拡張モジュールをビルドするには MySQL Client Library が必要でした。 これはつまり、PHP をソースからビルドしようとすると、 そのマシン上に MySQL をインストールしておく必要があったということです。 また、PHP のアプリケーションを動かす際に、 MySQL データベース用の拡張モジュールは最終的に MySQL Client Library のファイルを呼び出すことになるので、 システム上にそのファイルをインストールしておくことも必要でした。 MySQL Native Driver ならその必要はありません。 すべてが標準の配布ファイルに組み込まれているからです。 PHP をビルドしたり PHP のアプリケーションを動かしたりするときに、 MySQL をインストールする必要がなくなったのです。

MySQL Native Driver は PHP の拡張モジュールとして作られているので、 PHP 本体の動作と密につながっています。つまり、 特にメモリ管理などの点で効率があがります。 というのも、ドライバが PHP のメモリ管理システムを使えるからです。 また、PHP のメモリ制限もサポートします。 MySQL Native Driver を使うと MySQL Client Library と同等あるいはそれを上回るパフォーマンスを得られますが、 メモリの使い方はずっと効率的です。その一例をあげましょう。 MySQL Client Library を使うと各行がメモリに二度格納されることになりますが、 MySQL Native Driver の場合は各行がメモリに格納されるのは一度だけです。

> 注意: メモリ使用量の報告

> MySQL Native Driver は PHP のメモリ管理システムを使っているので、 そのメモリ使用量を memory_get_usage() で追えます。 これは libmysqlclient では不可能なことです。なぜなら libmysqlclient は C の malloc() 関数を使っているからです。

おすすめ機能

MySQL Native Driver には、それ特有の機能もあります。 以下にまとめるこれらの機能は、MySQL Client Library を使った MySQL データベース用の拡張モジュールでは利用できないものです。

- 持続的接続の改善

- mysqli_fetch_all() 関数

- パフォーマンス統計用の関数 mysqli_get_cache_stats()、 mysqli_get_client_stats()、 mysqli_get_connection_stats()

パフォーマンス統計機能を活用すれば、 パフォーマンス上のボトルネックを見つけるのに大いに役立つでしょう。

MySQL Native Driver を mysqli 拡張モジュールで使うと、持続的接続も可能です。

SSL サポート

MySQL Native Driver は PHP 5.3.3 以降で SSL をサポートします。

圧縮プロトコルのサポート

PHP 5.3.2 以降では、MySQL Native Driver は圧縮したクライアントサーバープロトコルをサポートします。 5.3.0 や 5.3.1 の時点ではまだ対応していませんでした。 ext/mysql や ext/mysqli では、MySQL Native Driver を使うように設定すればこの機能を使えるようになります。 ただし、PDO_MYSQL については mysqlnd と組み合わせても圧縮機能が使えないことに注意しましょう。

名前付きパイプのサポート

Windows 上での名前付きパイプのサポートは、PHP 5.4.0 で追加されました。