Zend Frameworkでは、データベースアクセスの抽象レイヤーとなるZend_Dbを備えています。基本的にはPDOを中心としたアダプタで構成されていますが、DB2、Oracle、MySQLiはネイティブのドライバによって実装されています*。
Zend_Dbでは、factoryメソッドに渡すURLを変更することで、ドライバの種類を変更可能です。このURLの形式は、「PDO_MYSQL」のように「PDO_」を先頭につけることが推奨されています*(表1)。
現在のバージョンでは、例えば次のような選択肢があります。
ほかのフレームワークでよくあるようなSQLの隠蔽効果はありませんが、シンプルで分かりやすいコードが記述できます。
<?php
require_once 'Zend/Db.php';
$params = array ('host' => '127.0.0.1', 'username' => 'malory', 'password' => '******', 'dbname' => 'camelot');
$db = Zend_Db::factory('PDO_MYSQL', $params);
$result = $db->query('SELECT * FROM example WHERE date > :placeholder', array('placeholder' => '2006-01-01'));
$rows = $result->fetchAll();
?>
Zend_Dbではドライバの抽象レイヤーが提供されているので、データベースにアクセスするAPIの違いを意識することなく、互換性の高いコードを記述可能です。ただし、データベースによっては発行するSQLに多少の差異が存在するので、SQLが記述されたアプリケーションを、互換性を意識せずに移行するのは難しいです。そのため、SQL文の生成をZend_Dbに委譲して、必要最低限の記述のみで済ませることもできます。
<?php
require_once 'Zend/Db.php';
$params = array ('host' => '127.0.0.1', 'username' => 'malory', 'password' => '******', 'dbname' => 'camelot');
$db = Zend_Db::factory('PDO_MYSQL', $params);
$select->from('round_table', '*')
->where('noble_title = :title')
->order('first_name')
->limit(10,20);
$params = array('title' => 'Sir');
$result = $db->fetchAll($select, $params);
?>
Zend_Db_Table は、Zend_Db_Tableクラスを継承したオブジェクトと、対応する表をマッピングするような仕組みを備えています。これによって、オブジェクト指向と親和性の高い記述が可能です。また、余計なコードを記述しなくても済むように、デフォルト値として規約が存在します。リスト7でいうと、「RoundTable」クラスはデータベースの「round_table」表とマッピングされます。また、主キーは「id」列として認識されます。ただし、次のように継承したクラスの変数を上書きして、任意の値をデフォルト値の代わりに使用することもできます。
<?
ass RoundTable extends Zend_Db_Table
{
$this->_name = 'another_table_name';
$this->_primary = 'another_column_name';
}
?>
<?php
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$db = $table->getAdapter();
$where = $db->quoteInto('noble_title = ?', 'Sir')
. $db->quoteInto('AND first_name = ?', 'Robin');
$order = 'favorite_color';
$row = $table->fetchRow($where, $order);
?>
以上、2回に渡ってZend Frameworkの機能と概要を解説しました。より詳細は、具体例を用いて今後解説していきます。また、Zend Frameworkのマニュアルでは、すぐに実行可能なサンプルコードを交えながらフレームワークの機能を解説しています。このマニュアルは、日本語を含む主要10か国語でリリースされており、英語が得意でない方にも始めやすいように配慮がなされています。ぜひチャレンジしてみてください。
次回からは、Zend Frameworkで構築されたブログツールを題材にして、実際にZend Frameworkに備わる機能や使い方を解説していきたいと思います。
ただし、Zend_Dbが提供するAPIはPDOに依存しないため、使用する上で意識しなくて良いよう配慮されている。
この方法によるURL指定は、Preview 0.2から推奨されており、Preview 0.1.5では別の指定方法も可能。
本記事は、オープンソースマガジン2006年11月号「Zend Framework」で加速するPHP開発を再構成したものです。
日本アイ・ビー・エム システムズエンジニアリング株式会社
杉田直哉
日本アイ・ビー・エム システムズ・エンジニアリング株式会社(ISE)は、日本アイ・ビー・エムグループにおけるSE技術者の専門家集団として1992年7月に設立された。
発足以来、IBM製品を中心とした難易度の高い複雑なシステム構築や先進技術の適用場面において、卓越したITスキルによりお客様と開発現場を支援してきた。
近年は、仮想化技術・グリッドコンピューティング・Web 2.0・オープンソースソフトウェア等々の先進技術分野での支援も展開している。
Copyright © ITmedia, Inc. All Rights Reserved.