PHP Data Objectとは? わかりやすく解説

PDO

【英】 PHP Data Object

PHP 5.1から実装された、新しデータベース抽象化のためのクラス。各データベースに対して固有のPDOドライバ用意することで、共通のAPI用いたデータアクセス可能にしつつ、ネイティブドライバに近い高速な処理を実現している。

現状では対応データベースの数が少ないため、データベース抽象化レイヤとしてはネイティブドライバを利用したPEAR::DBなどのモジュール多く利用されているが、将来的にはPDOがそのスタンダードになると期待されている。

関連Webサイト


PHP Data Object

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/03/24 05:51 UTC 版)

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

概要

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

<?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=pdotest",
                   "username", "password");
} catch(PDOException $e){
    var_dump($e->getMessage());
}
?>

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

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

機能

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

  • INSERT・UPDATE・DELETEなどのSQLクエリの実行
  • 以下の形式でのデータベースからの値の取得
  • 複数次元の配列でのすべての行の取得
  • プリペアードステートメントの実行及びエミュレーション
  • トランザクションの使用
  • オートコミットのサポート
  • テーブルのカラムの一般化機能

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

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

<?php
$names = 'ウィキペディア';
$stmt = $pdo->prepare('INSERT INTO user (name) VALUES (:name)');
$stmt->bindValue(':name', $names, PDO::PARAM_STR);
$stmt->execute();
?>
または:
<?php
$names = 'ウィキペディア';
$stmt = $pdo->prepare('INSERT INTO user (name) VALUES (: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]

注釈

出典

関連項目

外部リンク




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「PHP Data Object」の関連用語

PHP Data Objectのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



PHP Data Objectのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
PHPプロ!PHPプロ!
©COPYRIGHT ASIAL CORPORATION ALL RIGHTS RESERVED.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのPHP Data Object (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS