gpt4 book ai didi

pdo - Zend PDO ODBC 数据库选择

转载 作者:行者123 更新时间:2023-12-05 01:08:00 29 4
gpt4 key购买 nike

我正在尝试调整 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 对我来说是新手。

最佳答案

不熟悉PDO,因为我用的是ibm_db2,但是可以用CL命令WRKRDBDIRE找到数据库名.

使用 *SQL 命名时,非限定表名 ( SELECT * FROM TABLENAME ) 隐式地限定为用户配置文件名。所以如果 SARAHK 正在执行选择,它会变成 SELECT * FROM SARAHK.TABLENAME .所以你看到的错误表明 IBM 我认为你有一个不合格的表名。

如果您可以将 ODBC 驱动程序配置为使用 *SYSTEM 命名,它将使用库列表来定位不合格的表名。

我是一个老派的RPG程序员,所以我更熟悉传统的名字;这是一个备忘单:

  • 库 -> 架构
  • 文件 -> 表格
  • 成员 -> 没有 SQL 等效项 - 使用 ALIAS
  • 关于pdo - Zend PDO ODBC 数据库选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17625349/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com