ODBC 接続を使用するように Zend Skeleton アプリを適応させようとしています。次のように、Zend (同じテーブル、サーバー、すべて) の外部で PDO 接続をセットアップできます。
new PDO('odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=<serverName>;HOSTNAME=<serverName>;DATABASE=<databaseName>;',
'<userName>', '<password>');
$r = $this->conn->query('SELECT * FROM <databaseName>.<tableName>');
しかし、この情報を global.php ファイルに追加すると:
'db' => array(
'driver' => 'Pdo',
'dsn' => 'odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=<serverName>;HOSTNAME=<serverName>;DATABASE=<databaseName>;',
),
そして local.php で:
return array(
'db' => array(
'username' => '<userName>',
'password' => '<password>',
),
);
テーブルが見つからないというエラーが表示されます。
SQLSTATE[42S02]: Base table or view not found: 0 [IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0204 - <tableName> in <userName - yes you read that right> type *FILE not found.
これは<databaseName>.<tableName>
、クエリが Zend を介して実行されるときに、プレフィックスが二重引用符で囲まれているためだと思います。Zend が userName でテーブルを探している理由を説明できません。ただし、考えられるあらゆる方法で PDO の初期化でデータベースを宣言しようとしても、プレフィックスなしで PDO にテーブルを認識させることはできません。
PDO が実際にデータベース名を取得して、プレフィックスが不要になる方法はありますか? または、Zend に接頭辞を使用するように指示する方法はありますか (テーブル名を引用符で囲みません)。
ここで間違った言語を使用している場合はご容赦ください。SQL と iSeries の間を行き来するときに、スキーマ、データベース、ライブラリ、ファイル、テーブルなどの間で少し迷ってしまいます。
Zend は私にとって初めてのことです。