情况如下:我正在使用 Zend Framework 2 连接到 Oracle 数据库。我已将“Pdo_Oci”指定为适配器的驱动程序。我正在使用 Select 对象来构建查询并执行它们。
一切都很顺利,直到我尝试在 Select 对象上使用 limit 方法。由于我正在与 Oracle 交谈,并且 Oracle 没有 LIMIT,因此我希望该框架能够生成一个对 Oracle 有意义并模拟 LIMIT 的 sql 字符串(我猜是使用 ROWNUM)。
但是,生成的 sql 仅具有 LIMIT 关键字,执行时当然会出错,因为我的数据库不知道如何处理它。
所以,我看到了两种可能性:
1) 我的期望是错误的,limit() 方法只是对 LIMIT 的简单包装,不能用于 Oracle 数据库。像这样的帖子似乎表明情况并非如此,但我可能读错了。
2)我做错了其他事情。我应该使用其他驱动程序吗?
编辑:在回答 ZF2 学生的问题,但也希望为人们提供更多的背景来帮助我:
我没有明确地形成一个连接字符串。我在 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');