mysqli の概要このセクションでは、 PHP アプリケーションの開発で MySQL データベースを扱うときの選択肢について説明します。 API って何? API は Application Programming Interface の略で、 何らかのタスクを実行するためにアプリケーションから呼び出す必要のある クラスやメソッド、関数、変数などを定義したものです。 データベースとの通信を必要とする PHP アプリケーションが使うための API は、 通常は PHP の拡張モジュールとして公開されています。 API は手続き型にすることもできるし、 オブジェクト指向型にすることもできます。 手続き型の API の場合は何かの処理を実行するための関数を呼ぶことになり、 オブジェクト指向型の API の場合はクラスのインスタンスを作ってそのメソッドを呼ぶことになります。 通常は、後者の方法をおすすめします。 後者のほうがよりモダンであり、 きっちりとしたコードを書けるからです。 MySQL サーバーとの接続が必要な PHP アプリケーションを書く場合に 使える API はいくつかあって、その中から選べます。 このドキュメントでは、 どんな API が使えてどれを選ぶのが最適なのかを解説します。 コネクタとは? MySQL のドキュメントで使われている コネクタ という用語は、 何かのアプリケーションから MySQL データベースサーバーに接続するためのソフトウェアのことを指します。 MySQL はさまざまな言語用のコネクタを提供しており、 PHP もその中に含まれます。 PHP のアプリケーションで、 データベースサーバーとの通信が必要になったときには、 データベースサーバーへの接続やデータベースへの問い合わせなどの関数を呼ぶ PHP コードを書くことになるでしょう。 つまり、PHP アプリケーションから使える API を提供するソフトウェアが必要になるということです。 そのソフトウェアは、 アプリケーションとデータベースサーバーの間の通信も処理しないといけません。 おそらくは中間ライブラリも利用することになるでしょう。 このソフトウェアのことを一般的にコネクタと呼びます。 というのも、 このソフトウェアのおかげで アプリケーションがデータベースサーバーに 接続 (connect) できるようになるからです。 ドライバとは? ドライバとは、 特定のデータベースサーバーとの通信をするために作られたソフトウェアのことです。 ドライバはライブラリと呼ばれることもあり、 MySQL Client Library や MySQL Native ドライバ というように使われます。 これらのライブラリが実装するのは低レベルのプロトコルで、 これを使って MySQL データベースサーバーと通信します。 例を挙げると、データベース抽象化レイヤーの PHP Data Objects (PDO) は各データベース専用のドライバの中からひとつを選んで使います。 数あるドライバの中のひとつに PDO MYSQL ドライバがあり、 これが MySQL サーバーとのインターフェイスとなります。
人によっては、コネクタとドライバを混同して使うこともあって、 混乱の元となります。 MySQL 関連のドキュメントでは、 拡張モジュールとは? PHP のドキュメントを読んでいると、拡張モジュール という用語がよく出てきます。 PHP のコードには、コア機能とは別に オプションの拡張モジュールが用意されています。 PHP で使える MySQL 関連の拡張モジュールには mysqli や PDO MySQL があり、 PHP の拡張モジュール用フレームワークを使って実装されています。 拡張モジュールは一般的に PHP プログラマー向けの API を公開しており、 その機能をプログラムから使えるようになっています。 しかし、PHP 拡張モジュールフレームワークを使って書かれた拡張モジュールの中には、 PHP プログラマー向けの API を公開していないものもあります。 たとえば PDO MySQL ドライバは PHP の拡張モジュールですが、 それ自体は PHP プログラマー向けの API を公開していません。 さらに上位にある PDO レイヤーへのインターフェイスを提供しているだけです。 API と拡張モジュールとは同じ意味ではありません。 拡張モジュールが必ずしもプログラマー向けの API を公開しているとは限らないからです。 MySQL を使うために、提供されている主要な PHP API は何ですか? MySQL データベースサーバーに接続することを検討する際、 ふたつの主要な選択肢があります:
それぞれ、長所と短所があります。 以下の説明で、それぞれの API の重要な側面を簡単に説明していきます。 PHP の mysqli 拡張モジュールとは何ですか?
オブジェクト指向インターフェイスと同時に、 手続き型のインターフェイスも提供されています。
PDO とは何ですか? PHP Data Objects, または PDO は、PHP アプリケーションのための、特別なデータベース抽象化レイヤです。 PDO は、あなたのアプリケーションが接続するデータベースサーバーに関係なく、 一貫した API を提供します。 理屈の上では、PDO の API を使えば、 たとえば Firebird から MySQL にデータベースサーバーを切り替えることができます。 PHP コードに必要な変更は少なく済むでしょう。 データベース抽象化レイヤのその他の例としては、 Java の JDBC や、Perl の DBI が挙げられます。 PDO には、綺麗で、簡潔で、 移植可能な API であるという利点がある一方で、 最新の MySQL サーバーで利用可能な高度な機能を全て利用できるとは限らない、 という重要な欠点があります。 たとえば、PDO は MySQL がサポートしている 複数ステートメントの実行を許可していません。 PDO は、PHP の拡張モジュール用フレームワークを使って実装されています。 ソースコードは ext/pdo 以下にあります。 PDO についての詳細は、 PDO を参照ください。 PDO MYSQL ドライバ とは何ですか? PDO MySQL ドライバ 自体は、 少なくとも PHP プログラマから見ると API ではありません。 実際には、 PDO MySQL ドライバ は PDO の直下のレイヤにあって、 MySQL 特有の機能を提供しているものです。 プログラマは、PDO の API を呼ぶことは変わりませんが、 PDO は MySQL サーバーと通信するために、 PDO MySQL ドライバを使うのです。 PDO MySQL ドライバは、 数ある PDO ドライバのうち、利用できるもののひとつです。 他の PDO ドライバとして、Firebird と PostgreSQL データベースサーバーのものが含まれています。 PDO MySQL ドライバは、 PHP の拡張モジュール用フレームワークを使って実装されています。 ソースコードは ext/pdo_mysql 以下にありますが、 その API は PHP プログラマには公開されていません。 PDO MySQL ドライバについての詳細は、 MySQL (PDO) を参照ください。 PHP の MySQL Native ドライバとは何ですか?
MySQL データベースサーバーと通信するために、
しかし、
MySQL Native ドライバ は、 PHP 拡張モジュール用フレームワークを使って実装されています。 ソースコードは ext/mysqlnd 以下にありますが、 その API は PHP プログラマには公開されていません。 機能の比較 以下の表は、PHP から MySQL に接続する主要な方法に関する、 機能の比較を示しています:
|