Zend Framework 2查询中的双引号

时间:2013-05-31 08:30:02

标签: php zend-framework2 zend-db informix

我正在使用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->查询($ sql)使用原始sql查询数据库。

是否有办法禁用引用(在数据库配置中,例如)?

一些tipps将非常感激。 提前致谢

2 个答案:

答案 0 :(得分:1)

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

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文档。

答案 1 :(得分:0)

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

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

Windows不是我的专业领域。