Zend PDO ODBC数据库选择
我正在尝试调整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之间进行时,我在Schema,数据库,库,文件,表等之间会有点丢失. 我非常感谢你提供的任何帮助,Zend对我来说是新手. 解决方法
不熟悉PDO,因为我使用ibm_db2,但可以使用CL命令WRKRDBDIRE找到数据库名称.
使用* SQL命名,使用用户配置文件名称隐式限定非限定表名(SELECT * FROM TABLENAME).因此,如果SARAHK正在执行选择,它将成为SELECT * FROM SARAHK.TABLENAME.所以你看到的错误表明IBM我认为你有一个不合格的表名. 如果您可以将ODBC驱动程序配置为使用* SYSTEM命名,则它将使用库列表来查找非限定表名. 我是一名老派RPG程序员,所以我对传统名字比较熟悉;这是一个备忘单: >图书馆 – >架构>文件 – >表>会员 – >没有SQL等价物 – 使用ALIAS (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |