我正在尝试调整 Zend Skeleton App 以使用 ODBC 连接。我可以像这样在 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 对我来说是新手。