3

我正在使用 Zend Framework 2 进行应用程序开发。整个应用程序基于 IBM Informix 数据库。

数据库配置如下所示:

return array(
'db' => array(
    'driver'         => 'Pdo',
    'dsn'            => 'dsn:connection:string',
    'driver_options' => array(
    ),
),
'service_manager' => array(
    'factories' => array(
        'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
    ),
),
);

当通过实例化 Zend\Db\Sql\Select 对象来查询数据库时,查询总是被引用,这不应该发生,因为 Informix 不能再处理查询了。

预期的查询字符串:

SELECT column1, column2 FROM table

Zend 生成的查询字符串:

SELECT "column1", "column2" from "table"

经过一些研究,我发现了类似的案例,但两种解决方案都不可接受。这里的问题是,我必须传递一个 Zend\Db\Sql\Select 对象,因此无法通过 $dbAdapter->query($sql) 使用原始 sql 查询数据库。

有没有办法禁用报价(例如在数据库配置中)?

一些小费将不胜感激。提前致谢

4

2 回答 2

2

您可以禁用引用标识符。像这样

use Zend\Db\Adapter\Adapter as DbAdapter;

// DB2 Connection
$adapter = new DbAdapter(array(
    'driver' => 'IbmDb2',
    'database' => '*LOCAL',
    'username' => '',
    'password' => '',
    'driver_options' => array(
        'i5_naming' => DB2_I5_NAMING_ON,
        'i5_libl' => 'LIB1 LIB2 LIB3'
    ),
    'platform_options' => array('quote_identifiers' => false)
);

取自 Zend Framework 文档。

于 2013-07-06T15:26:20.837 回答
0

如果您希望 Informix 识别该表示法,您需要设置环境变量 DELIMIDENT 以便服务器知道将此类双引号字符串视为标识符而不是字符串。

有多种方法可以做到这一点;哪个最好取决于您的系统。看起来您使用的是 Windows 而不是 Unix。有一个 SETNET32 实用程序可以设置环境变量。在 Unix 上(不确定 Windows),您可以添加DELIMIDENT 1$HOME/.informix或到$INFORMIXDIR/etc/informixrc(非常规,但应该可以)。您可以通过 shell 设置环境变量;您可以将其指定为连接属性。

Windows 不是我的专业领域。

于 2013-06-03T16:17:47.317 回答