TOP書籍連動> PDOの紹介
PDOの紹介
PDOの紹介

第1回:PDOの概要

著者:Ilia Alshanetsky   2005/12/6
1   2  3  次のページ
PDOの紹介

   PHPの経験がある人ならばデータベースを扱うのにPHPを使用したことがあると思います。多くの場合、データベースはデータの収集と解析を目的とした柔軟性のある情報ストレージとして使用され、開発者のコミュニティで一般的によく使用されています。多くの一般的なツールでは、1つの問題に対して多くのアプローチがとられますが、データベースシステムでは標準機能の違いはほとんどありません。

   情報を扱う理想的な方法として、いくつものデータベースシステムが競合しています。数百万人の開発者が使用しているPHP言語では、1人の開発者も取り残されないようにこれらのデータベースエンジンの大部分をサポートしています。

   PHPでのデータベースのインタフェース開発は、理想的なデータベースとの通信方法を考え抜いた初期設計の通りには完成しないことがほとんどです。というのも、開発者が馴染みのないデータベースにPHPを接続させなければならない状況が頻繁に起きるためです。

   開発者は他のデータベースのエクステンションからコードを抜き出し、それらのデータベースに対応させることで最初のインタフェースを作成します。そして、大抵はユーザと開発者が微調整を繰り返し、初期のコードに新たな機能と改良を加えて完全なデータベースエクステンションへとバージョンアップしていきます。

   この取り組みが数年にわたって続くと、ある問題が発生します。PHPのデータベースインタフェースのAPIは比較的よく似ているといわれますが、実際はかけ離れているのです。この問題は、様々なデータベースエクステンションで定義されている関数を見てみるとわかりやすいでしょう。

   それぞれのエクステンションにはそれぞれ異なる関数があります。例えば、MySQLエクステンションではレコードを要素の配列として取得するのにmysql_fetch_row()関数を使用しますが、PostgreSQLではpg_fetch_row()関数を使用します。また名前の違いは別として、関数の引数の順番もそれぞれ異なります。

   例えばMySQLとPostgreSQLを使用する際に、前者のクエリ実行関数はデータベース接続リソースを必要としませんが、第2引数にすることもできます。一方PostgreSQLや他のいくつかのエクステンションでは、データベースリソースの指定が必須であり、最初のパラメータとして関数に渡さなければなりません。

   すべてのエクステンションの違いを文章にすると本が1つできるほど膨大になってしまい、この記事の範囲を超えてしまいますので、ここでは割愛します。

   これらのAPIの違いは、開発者が他のデータベースに興味を持たず特定のデータベースばかりを使用していることですが、それは複数のデータベースのバックエンドサポートを必要としている人たちにとっては深刻な問題です。そのため、多数のデータベースの抽象化ライブラリが作成されてきました。単に正しいネイティブ関数を選び、異なる順番で指定する必要のある引数を取り扱うという簡単なものから、インタフェースを抽象化するだけでなく、データベースシステムそのものの非互換性を吸収するような複雑で動作が遅くなっているようなものまであります。

   この問題については、PHPのコアを開発しているコミュニティに対して多少の不満があり、LinuxTag 2003でPHP Data Object(PDO)を使用して解決しようと決めた原因でした。PDOは最新のPHP 5のオブジェクト指向サポートを使用して、PHPで使用できるすべてのデータベースシステムで共通のAPIを提供できるように設計されています。

   共通のデータベースとの通信を行うインタフェースを作成することで、データベースのラッパーとして使用されているライブラリの大部分は必要なくなります。

   PDOはPHPではなくC言語で記述されているため高速なインタフェースであり、ネイティブのインタフェースに対するオーバーヘッドが少なくなっています。さらにPDOはサポートされるすべてのデータベース上で実行される共通の操作を統一し、その実行(もしくは必要に応じたエミュレーション)を簡単で便利にすることを目的としています。

   PDOには以下の機能があります。

  1. INSERT・UPDATE・DELETEのSQLクエリの実行
  2. 以下の形式でのデータベースからの値の取得
       配列
       オブジェクト(定義されているクラスのインスタンスの作成)
       同じスコープ内で有効な変数
       文字列
  3. 複数次元の配列でのすべての行の取得
  4. プリペアードステートメントの実行
  5. トランザクションの使用
  6. オートコミットのサポート
  7. テーブルのカラムの一般化機能

表1:PDOの機能

   これらの機能によりコードを記述する際、一般的なSQLを使用する限りは無視できるようなデータベースそのものの違いだけを考えればよくなります。

1   2  3  次のページ

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.asial.co.jp/magazine/
Ilia Alshanetsky
著者プロフィール
Ilia Alshanetsky
PHP開発チームの活動メンバーの1人であり、現在のPHP 4.3.X.のリリースマネージャー。また、オープンソース掲示板FUDフォーラム(http://fud.prohost.org/forum/)をはじめとする数多くのプロジェクトにも貢献している。


INDEX
第1回:PDOの概要
  PDOの紹介
  現在の状況
  PDOを使ってみる