皆さんはPHPのプログラムからデータベースのレコードへアクセスする場合、普段はどうされていますか?やはりSQL文を直接使っている方が多いでしょうか。
オブジェクトリレーショナルマッピング(O/Rマッピング)を使うと、データベースのレコードをオブジェクトのように扱うことができ、SQL文を直接書くことなくアクセスできるようになります。
PHP用のO/Rマッパーとしては、古くはPEARライブラリのDB_DataObject、最近有名なものとしてはsymfonyフレームワークにて採用されているPropelなどがありますが、今回は日本ではあまり馴染みがないと思われるEZPDOをご紹介したいと思います。
EZPDOは、その名前「Easy PHP Data Objects」が示すように、簡単に使えることを目指したO/Rマッパーです。
まずは、
からダウンロードしましょう。執筆時の最新の安定版は1.1.6になります。
無事ダウンロードが終わったら、好きな場所でファイルを展開します。
$ tar xzvf ezpdo.1.1.6.tar.gz
それでは、早速付属のサンプルプログラムを動かしてみましょう。まず、booksディレクトリへ移動します。
$ cd ezpdo.1.1.6/examples/books/
今回はMySQLで試してみようと思いますので、config.iniのdefault_dsn編集します。
$ vi config.ini
; The default DSN to the database you want to store your objects
; This will be the default DSN for classes that do not have
DSN specified
; default_dsn = sqlite://books.db
default_dsn = mysql://ユーザ名:パスワード@ホスト名/ezpdo_ex
; default_dsn = pgsql://ezpdo_ex:pdoiseasy@localhost/ezpdo_ex
次に、使用するデータベースを作成します。
$ mysql -u ユーザ -p パスワード -h ホスト名
mysql> create database ezpdo_ex;
mysql> Bye
準備が整いましたので、データベースにレコードを登録するプログラムと登録内容を表示するプログラムを実行してみましょう。
$ php add.php
$ php print.php
$ php find.php
それぞれのソースコードを見てみると、SQL文が書かれていませんが、データベースへアクセスできているようです。
今度は、実際にデータベースを覗いてみましょう。
mysql> use ezpdo_ex;
mysql> show tables;
+--------------------------------+
| Tables_in_ezpdo_ex |
+--------------------------------+
| ezpdo_Author |
| ezpdo_Book |
| ezpdo__ez_relation_author_book |
+--------------------------------+
SELECT文で各テーブルの内容を確認すると、ezpdo_Authorとezpdo_Bookへそれぞれのレコードが登録され、ezpdo__ez_relation_author_bookへAuthorとBookのリレーション情報が入っているのが見て取れると思います。
特に設定ファイルなどは見当たりませんが、どうやって実現しているのでしょうか? では、classes/Author.phpを見てみましょう。
/**
* Name of the author
* @var string
* @orm char(64)
*/
public $name;
その秘密は、これらのコメント行に書かれている「@orm」というカスタムタグになります。
このタグへデータの型やリレーションの定義を記述し、m:n(Many to Many)のリレーションなどを実現しています。
このようにSQL文を書くことなく簡単にデータベースへアクセスできるEZPDO、機会がありましたら使ってみては如何でしょうか。
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。