[ ZendFramework1 ] 各種DBのテーブル名やカラム名にSQL予約語を使用する

Pocket

「SELECT」や「ORDER」などの予約語をテーブル名やカラム名として使用する場合には、例えば Oracle の場合は、ダブルクォート (“) で名前を囲む必要があります。

ここでは、Zend Framework でこれらの処理を記述するサンプルコードを掲載しています。なお、ここでの出力例は Oracle の場合であり、その他のデータベースでは異なる結果が得られることもあります。

スポンサーリンク

SQL予約語をテーブル名やカラム名に使用する ( quoteIdentifier )

ZendFramework では、SQL予約語をテーブル名やカラム名で使用するため(これはちょっと言い過ぎです。と、いうよりも間違いですね(-_-;))に Zend_Db_AdapterquoteIdentifier メソッドが提供されています。以下は「order」テーブルの「by」列を取得する SQL 文の組み立てを行うサンプルコードになります。

// DB アダプタを取得
$adpt = Zend_Db::factory($config->database);

// データベースへ接続
$adpt->getConnection();

$tableName = $adpt->quoteIdentifier("order");
$colName   = $adpt->quoteIdentifier("by");

// select 文の組み立て
$sql = "select $colName from $tableName";
var_dump($sql);
// select "by" from "order"

/*
 * この位置で SQL の発行などの処理
 *
 */

// データベースから切断
$adpt->closeConnection();

テーブル名やカラム名のエイリアス(別名)を使用する

上記の quoteIdentifier メソッドは、テーブル名やカラム名にエイリアス(別名)についてはサポートしていません。エイリアスに対応するには次のように quoteTableAs または quoteColumnAs メソッドを使用します。

// テーブル名のエイリアスを設定する
$tableName = $adpt->quoteTableAs("order", "aliasOrder");

// カラム名のエイリアスを設定する
$colName = $adpt->quoteColumnAs("by", "aliasBy");

// select 文の組み立て
$sql = "select $colName from $tableName";
var_dump($sql);
// 'select "by" AS "aliasBy" from "order" "aliasOrder"'

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *