【发布时间】: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');
【问题讨论】:
-
那么您找到解决方案了吗?如果是这样,那么分享呢(通过回答您自己的问题...)?