【问题标题】:Zend Framework 2 Double Quotes in QueriesZend Framework 2 查询中的双引号
【发布时间】:2013-05-31 08:30:02
【问题描述】:

我正在使用 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 查询数据库。

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

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

【问题讨论】:

  • 为什么要使用 Select 生成 SQL,然后运行原始查询?运行原始查询或使用 Select builder 为您执行它...
  • 你误会了——我写了我必须传递一个 Zend\Db\Sql\Select 对象,所以通过原始查询查询数据库是没有选择的。
  • 感谢 sroes - 这指导我的方式正确。
  • stackoverflow.com/questions/39593975/… 在查询级别它是自我的..

标签: php zend-framework2 zend-db informix


【解决方案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 文档。

【讨论】:

    【解决方案2】:

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

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

    Windows 不是我的专业领域。

    【讨论】:

      猜你喜欢
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多