DB_DataObjectで使えない列名
また妙なところでハマってしまった…。
PEAR/DB_DataObjectを使ってDBアクセスをするテストをしていたところ、PostgreSQLでテーブルを作って、createTables.phpを実行した時に、以下のようなWarningが出力されました。
***************************************************************** ** WARNING ** ** Found column 'no', which is invalid in an .ini file ** ** This line will not be writen to the file - you will have ** ** define the keys()/method manually. ** *****************************************************************
まぁ、書いてある通りなんですが、「iniファイルの中に"no"っていう不正な列がありますよ」と…。
で、createTables.phpでは自動でiniファイルに"no"列が定義できないようなので、手動で定義を追加してDBアクセスしてみる…けど、やっぱりダメ…。
んじゃ、ソースを追ってみるか…って事で、createTables.phpを見てみる。
<?php require_once 'DB/DataObject/Generator.php'; //途中略… $generator = new DB_DataObject_Generator; $generator->start(); ?>
という事で、結果的にGenerator.phpをrequireして呼び出してるだけなので、Generator.phpを見てみる。
<?php if (in_array($t->name,array('null','yes','no','true','false'))) { echo "*****************************************************************\n". "** WARNING **\n". "** Found column '{$t->name}', which is invalid in an .ini file **\n". "** This line will not be writen to the file - you will have **\n". "** define the keys()/method manually. **\n". "*****************************************************************\n"; $write_ini = false; } else { $this->_newConfig .= "{$t->name} = $type\n"; } ?>
出力されたWarningで検索すると、こんなコードのところがある。
つまり、"null"とか"no"とかっていう列名はPEAR/DB_DataObjectでは使っちゃいけない事にしてるって感じですな…。
てことで、結局、"no"っていう列名は使わない方向で対応しました。
…が、"null"・"true"・"false"はそもそもDB側でテーブル作る時に列名にはできないのは分かりますが、"yes"・"no"は列名として使えますよねぇ?
特に"no"って、つい列名として使っちゃいたくなる気もするんですがNGなんですね…。(^^;