我正在使用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将非常感激。 提前致谢
答案 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不是我的专业领域。