【问题标题】:Zend Framework 2 - Oracle driver and limit() methodZend Framework 2 - Oracle 驱动程序和 limit() 方法
【发布时间】:2013-02-20 17:00:45
【问题描述】:

情况如下:我正在使用 Zend Framework 2 连接到 Oracle 数据库。我已将“Pdo_Oci”指定为适配器的驱动程序。我正在使用 Select 对象来构建查询并执行它们。

一切都很顺利,直到我尝试在 Select 对象上使用 limit 方法。由于我正在与 Oracle 交谈,并且 Oracle 没有 LIMIT,我希望该框架生成一个对 Oracle 有意义并模拟 LIMIT 的 sql 字符串(我猜是使用 ROWNUM)。

但是,生成的 sql 只包含 LIMIT 关键字,执行时当然会出错,因为我的数据库不知道如何处理它。

所以,我看到了两种可能性:

1) 我的期望是错误的,limit() 方法只是 LIMIT 的简单包装,不能用于 Oracle 数据库。 this one 之类的帖子似乎表明情况并非如此,但我可能读错了。

2) 我做错了什么。我应该使用其他驱动程序吗?

编辑:回答 ZF2 Student 的问题,但也希望为人们提供更多帮助我的背景:

我没有明确地形成一个连接字符串。我只是在 local.php 中有必要的数据库配置:

return array(
    'db' => array(
                'driver' => 'Pdo_Oci',
                'database' => 'my_database_host',
                'username' => 'my_user_name',
                'password' => 'my_password'

    ),  
);

在我的 global.php 中,我设置了一个适配器工厂:

return array(     
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
            'aliases' => array(
                    'db' => 'Zend\Db\Adapter\Adapter',
            ),            
    ),

);

然后我像这样在我的控制器中检索适配器:

$db = $this->getServiceLocator()->get('db');

【问题讨论】:

  • 那么您找到解决方案了吗?如果是这样,那么分享呢(通过回答您自己的问题...)?

标签: oracle zend-framework2


【解决方案1】:

我设法解决了这个问题,但这要归功于 Zend 框架的 2.1 更新。显然在 2.0 中没有提供特定于 oci 的驱动程序。我的“pdo_oci”尝试实际上默认为通用 pdo 驱动程序。

使用 zf 2.1.,我这样指定我的连接:

'db' => array(
            'driver' => 'oci8',
            'username' => 'myUser',
            'password' => 'myPW',
            'connection' => '(DESCRIPTION =
              (ADDRESS_LIST =
               (ADDRESS = (PROTOCOL = TCP)(HOST = myHost)(PORT = myPort))
              )
             (CONNECT_DATA =
              (SERVICE_NAME = myService)
             )
            )'
)

然后,2.1 框架将使用 Zend\Db\Adapter\Driver\Oci8 命名空间中的类,它们将正确使用 oci8 扩展 - 仍然需要在您的 php.ini 中启用 - 并为限制和偏移方法。

我希望这对其他人有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2013-12-12
    • 2013-05-08
    • 2015-04-23
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多