PHP_Data_Objectとは何? わかりやすく解説 Weblio辞書 (original) (raw)

PHP Data Object (PDO) とはPHPに拡張モジュールとして標準で提供されているデータベース抽象化レイヤであり、各種データベース(DBMSRDBMS)への接続を抽象化する。

概要

2005年11月24日にリリースされたPHP 5.1.0から標準でバンドルされるようになった拡張モジュール(PECL)であり、データソース名(DSN)によって使用する内部エンジンを切り替えることで各種データベースに対する統一的なアクセスインターフェイスを提供する。

getMessage()); } ?>

例えば、上記のコードではPDOクラスの第一引数にDSNを与えており、mysql:がMySQL或いはMariaDBに接続するための内部エンジンを使用することを表している。 この部分をpgsql:などに変更することで使用するデータベースをMySQLからPostgreSQLなどに変更することが出来る。

多くのデータベースに対応する必要のあるシステム開発や、システムを異なるデータベースに移行するときなどに、特に威力を発揮する。 またDoctrineやEloquentのようなORMライブラリの内部でデータベース接続を行うバックエンドとして利用されている。

機能

PDOは、以下の機能を提供している[1]

プリペアードステートメントを使ったプログラム例

例えば userテーブルに変数$nameに'ウィキペディア'という文字列をSQLに挿入する例(prepareメソッド):

stmt=stmt = stmt=pdo->prepare('INSERT INTO user (name) VALUES (:name)'); stmt−>bindValue(′:name′,stmt->bindValue(':name', stmt>bindValue(:name,names, PDO::PARAM_STR); $stmt->execute(); ?>

または: stmt=stmt = stmt=pdo->prepare('INSERT INTO user (name) VALUES (:name)'); stmt−>execute([′:name′=>stmt->execute([':name' => stmt>execute([:name=>names]); ?>

実装までの経緯

PHPはWebアプリケーション作成の開発に適した言語であり、Webアプリケーションと連携する多くのデータベースにアクセスする機能も、モジュールとして標準で備えている。しかし、その接続するための関数とそれに渡す引数はそれぞれのデータベース毎に異なっていた。

MySQLMariaDBではmysql_connect関数に代表されるMySQLモジュール[※ 1](PHP7.0現在はmysqli_connnectに代表されるMySQLi[※ 2]に置き換えられた[※ 3])、PostgreSQLではpg_connect関数に代表されるPostgreSQLモジュール[※ 4]など、データベース毎に実装が異なっていた。また、関数に渡すパラメータなども各データベースによって異なるなど、複数のデータベースをサポートする開発者にとって多大な負担になっていた[1]

PHP4では、PEARの1つとして、PEAR::DBがあり、これがデータベースへのアクセス機能をまとめ、共通のAPIを提供していた。しかし、この機能はPHPスクリプトで書かれているため、速度面で遅くなりがちという欠点を抱えていた[2]。中小規模のシステムならともかく、大規模なシステムではその速度の遅さが欠点となっていた。

そこで、PHP5からはC言語で書かれた拡張モジュールとしてPDOが作成・提供されることとなった。

備考

PDOはデータベースへの接続を抽象化するライブラリであり、SQLに対する抽象化は殆ど行わないことに注意が必要である。 すなわちデータベース毎の独自拡張の利用やSQL構文の差異の吸収はプログラマが手で行うか、クエリビルダやORMなどのより高度な抽象化を行うライブラリを利用する必要がある。

また、プリペアドステートメントを用いることでSQLインジェクションの脆弱性をより安全に回避することができるが、環境によっては対応が不完全で問題が発生したケースもある[3]

注釈

  1. ^ PHP: MySQL (最初の API) - Manual
  2. ^ PHP: MySQLi - Manual
  3. ^ PHP: 削除された拡張モジュールおよび SAPI - Manual
  4. ^ PHP: PostgreSQL - Manual

出典

  1. ^ a b ThinkIT 第1回:PDOの概要 (1/3)
  2. ^ PDOでサクサクDB開発:CodeZine
  3. ^ PHP5.3.6からPDOの文字エンコーディング指定が可能となったがWindows版では不具合(脆弱性)あり

関連項目

外部リンク

PHP
実装 Zend Engine(公式) HHVM Parrot Phalanger
ライブラリ PDO PEAR PECL PHPUnit Standard PHP Library Composer
フレームワーク CakePHP CodeIgniter Drupal eZ Publish FuelPHP Joomla! Laravel MODX NetCommons PRADO Symfony TYPO3 WordPress XOOPS Yii Zend Framework Silex
IDE Aptana Eclipse PDT NetBeans RadPHP Zend Studio(英語版PhpStorm
人物 アンディ・ガトマンズ ゼーブ・スラスキー ラスマス・ラードフ
その他 PHP License Hack LAMP WampServer XAMPP
カテゴリ コモンズ