「SELECT」や「ORDER」などの予約語をテーブル名やカラム名として使用する場合には、例えば Oracle の場合は、ダブルクォート (“) で名前を囲む必要があります。
ここでは、Zend Framework でこれらの処理を記述するサンプルコードを掲載しています。なお、ここでの出力例は Oracle の場合であり、その他のデータベースでは異なる結果が得られることもあります。
スポンサーリンク
SQL予約語をテーブル名やカラム名に使用する ( quoteIdentifier )
ZendFramework では、SQL予約語をテーブル名やカラム名で使用するため(これはちょっと言い過ぎです。と、いうよりも間違いですね(-_-;))に Zend_Db_Adapter の quoteIdentifier メソッドが提供されています。以下は「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"'