このセクションでは、PHP アプリケーション開発中に Mysql データベースと対話する必要がある場合に使用できるオプションについて簡単に紹介します。
APIとは何ですか?
アプリケーション プログラミング インターフェイス (Application Programming Interface の略称) は、アプリケーションが特定のタスクを完了するために呼び出す必要があるクラス、メソッド、関数、変数などを定義します。 PHP アプリケーションがデータベースと対話する必要がある場合、必要な API は通常、PHP 拡張機能 (端末の PHP プログラマーによって呼び出される) を通じて公開されます。
API は手続き型またはオブジェクト指向にすることができます。手続き型 API の場合は関数を呼び出すことでタスクを完了しますが、オブジェクト指向 API の場合はクラスをインスタンス化し、インスタンス化後に取得したオブジェクトのメソッドを呼び出します。 2 つのインターフェイスのうち、後者はより現代的で、優れたコード構造を提供するため、通常は好まれます。
MySQL サーバーに接続する必要がある PHP アプリケーションを構築する場合、選択できる API がいくつかあります。このドキュメントでは、利用可能な API について説明し、アプリケーションに最適なソリューションを選択する方法について説明します。
コネクタとは何ですか?
MySQL のドキュメントでは、connector という用語は、「アプリケーションが MySQL データベース サーバーに接続できるようにするソフトウェア コードの一部」と説明されています。 MySQL は、PHP を含む多くの言語用のコネクタを提供します。
PHP アプリケーションがデータベース サーバーと対話する必要がある場合、「データベース サーバーへの接続」、「データベースのクエリ」、およびその他のデータベース関連機能などの一連のアクティビティを完了するための PHP コードを作成する必要があります。 PHP アプリケーションは、これらの API を提供するソフトウェア、または必要に応じて中間ライブラリを使用して、アプリケーションとデータベース サーバー間の対話を処理します。 この種のソフトウェアは通常、参照 をデータベース サーバーに接続 できるようにするコネクターとして考えられます。
ドライバーとは何ですか?
ドライバーは、特定の種類のデータベース サーバーと対話するように設計されたソフトウェア コードです。ドライバーは、MySQL クライアント ライブラリや MySQL ネイティブ ドライバー ライブラリなどのいくつかのライブラリを呼び出す場合があります。 これらのライブラリは、MySQL データベース サーバーと対話するための低レベル プロトコルを実装します。
例として、PDO (PHP Database Object の略語) データベース抽象化レイヤーでは、さまざまなデータベース固有のドライバーを使用できます。ドライバーの 1 つは PDO MYSQL ドライバーで、これは MySQL サーバーとのインターフェイスです。
場合によっては、コネクタとドライバーという用語を同じ意味で使用することがあります。 MySQL 関連のドキュメントでは、「ドライバー」という用語は、データベースの特定の部分にソフトウェア コードを提供するコネクタ パッケージとして使用されます。
拡張機能とは何ですか?
PHP ドキュメントには、他の多くの 拡張機能 もあります。 PHP コードは、コアと、コア機能を構成するいくつかのオプションの拡張機能で構成されます。 mysqli、mysql などの MySQL 関連の PHP 拡張機能は、すべて PHP 拡張フレームワークに基づいて実装されています。
拡張機能の一般的な機能は、API を PHP プログラマに公開し、プログラマが拡張機能を使用できるようにすることです。もちろん、PHP 拡張フレームワークに基づいて開発され、API インターフェイスを PHP プログラマに公開しない拡張機能もいくつかあります。
たとえば、PDO MySQL ドライバー拡張機能は API インターフェイスを PHP プログラマーに公開しませんが、その上の PDO レイヤーへのインターフェイスを提供します。
拡張機能は API インターフェイスをプログラマに公開する必要がない場合があるため、API と拡張機能という用語は同じものを表しません。
PHP for MySQL で提供される主な API は何ですか?
MySQL データベース サーバーへの接続を検討する場合、選択できる主要な API は 3 つあります:
PHP 用の MySQL 拡張機能
PHP 用の mysqli 拡張機能
PHP データオブジェクト (PDO)
3 つにはそれぞれ独自の長所と短所があります。以下の説明は、各 API の主要な側面を簡単に紹介することを目的としています。
PHP 用の MySQL 拡張機能とは何ですか?
これは、PHP アプリケーションが MySQL データベースと対話できるようにするために設計および開発された初期の拡張機能です。 mysql 拡張機能はプロシージャ指向のインターフェイスを提供し、MySQL 4.1.3 以前向けに設計されています。したがって、この拡張機能は MySQL 4.1.3 以降のデータベース サーバーと対話できますが、それ以降の MySQL サーバーが提供する一部の機能はサポートしません。
注意:
MySQL 4.1.3 以降のサーバー バージョンを使用している場合は、代わりに mysqli 拡張機能を使用することを強くお勧めします。
mysql 拡張機能のソース コードは、PHP 拡張機能ディレクトリ ext/mysql にあります。
mysql 拡張機能の詳細については、「MySQL」を参照してください。
PHP 用の mysqli 拡張機能とは何ですか?
mysqli 拡張機能 (MySQL enhancement 拡張機能とも呼ばれます) を使用すると、MySQL 4.1.3 以降の新しい高度な機能を利用できます。 mysqli 拡張機能は PHP 5 以降に含まれています。
mysqli 拡張機能には、mysql 拡張機能と比較して、次のような利点があります。
オブジェクト指向のインターフェイスを提供すると同時に、プロセス指向のインターフェイスも提供します。注意:
MySQL 4.1.3 以降を使用している場合は、この拡張機能を使用することを強く お勧めします。
mysqli 拡張機能は PHP 拡張機能フレームワークを使用して構築されており、そのソース コードは PHP ソース コード ディレクトリの ext/mysqli にあります。
mysqli 拡張機能の詳細については、「Mysqli」を参照してください。
PDOとは何ですか?
PHP データ オブジェクトは、PHP アプリケーションのデータベース抽象化レイヤー仕様です。 PDO は、PHP アプリケーションが接続する特定のデータベース サーバー システム タイプを気にしないようにするための統合 API インターフェイスを提供します。つまり、PDO の API を使用すると、PHP コードを少し変更するだけで、必要に応じていつでもデータベース サーバー (Firebird から MySQL など) をシームレスに切り替えることができます。データベース抽象化レイヤーの他の例には、Java アプリケーションの JDBC や Perl の DBI などがあります。
もちろん、PDO には、クリーンでシンプル、ポータブルな API などの独自の進歩もあります。その主な欠点は、新しい MySQL サーバーによって提供されるすべての高度なデータベース機能の使用が制限されることです。たとえば、PDO では、MySQL でサポートされている複数ステートメントの実行を使用できません。
PDO は PHP 拡張フレームワークに基づいて実装されており、そのソース コードは PHP ソース コード ディレクトリの ext/pdo にあります。
PDO の詳細については、「PDO」を参照してください。
PDO の MySQL ドライバーとは何ですか?
少なくとも PHP プログラマーの観点からすると、PDO の MySQL ドライバーは API ではありません。実際、PDO の MySQL ドライバーは PDO 自体の下位レベルにあり、特定の MySQL 関数を提供します。プログラマーは PDO の API を直接呼び出し、PDO は PDO の MySQL ドライバーを使用して MySQL サーバーとの対話を完了します。
PDO の MySQL ドライバーは、多くの PDO ドライバーの 1 つです。その他の利用可能な PDO ドライバーには、Firebird、PostgreSQL などが含まれます。
PDO の MySQL ドライバーは、PHP 拡張フレームワークに基づいて実装されています。そのソース コードは、PHP ソース コード ディレクトリの ext/pdo_mysql にあります。 PHP プログラマーには API は公開されません。
PDO MySQL 拡張機能の詳細については、「MySQL (PDO)」を参照してください。
PHP 用 MySQL ネイティブ ドライバーとは何ですか?
MySQL データベース サーバーと対話するために、mysql 拡張機能、mysqli 拡張機能、および PDO MySQL ドライバーはすべて、必要なプロトコルを実装する基礎となるライブラリを使用します。以前は、使用可能なライブラリは MySQL クライアント ライブラリと libmysql だけでした。
ただし、libmysql に含まれるインターフェイスは、アプリケーションと PHP の対話用に最適化されていません。libmysql は元々 C アプリケーション用に設計されています。このため、MySQL ネイティブ ドライバー mysqlnd は、PHP アプリケーション用の libmysql の修正バージョンとして開発されました。
mysql、mysqli、および PDO Mysql ドライバーは、それぞれ libmysql または mysqlnd として構成して使用できます。 mysqlndPHPシステム専用に設計されたライブラリとして、libmysqlと比較してメモリと速度が大幅に向上しています。ぜひこれらの改善点を試してみてください。
注意:
MySQL Native ドライバーは、MySQL サーバーのバージョンが 4.1.3 以降の場合にのみ使用できます。
MySQL ネイティブ ドライバーは、PHP 拡張フレームワークに基づいて実装されています。ソース コードは、PHP ソース コード ディレクトリの ext/mysqlnd にあります。 PHP プログラマにはインターフェイスを公開しません。
機能の比較
次の表は、PHP の 3 つの主要な MySQL 接続メソッドの機能を比較しています。
PHP的mysqli扩展 | PDO (使用PDO MySQL驱动和MySQL Native驱动) | PHP的mysql扩展 | |
---|---|---|---|
引入的PHP版本 | 5.0 | 5.0 | 3.0之前 |
PHP5.x是否包含 | 是 | 是 | 是 |
MySQL开发状态 | 活跃 | 在PHP5.3中活跃 | 仅维护 |
在MySQL新项目中的建议使用程度 | 建议 - 首选 | 建议 | 不建议 |
API 文字セットのサポート | は | は | いいえ |
サーバー側のprepareステートメントのサポート | は | は | いいえ |
クライアント準備ステートメントのサポート | いいえ | は | いいえ |
ストアドプロシージャのサポート | は | は | いいえ |
複数のステートメント実行のサポート | は | ほとんど | いいえ |
MySQL4.1以降のすべての機能をサポートしていますか |