我猜想 Zend 用来构建 sql 语句的方式不适用于 Oracle。
我在本地 Windows PC 中使用 Oracle。我的 PHP 已经与 oci8 扩展的 Oracle 一起正常工作,我按照以下链接进行了配置:
http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html
我正在尝试将 ZF2 与 Oracle 连接。我正在使用 Zend 网站上的教程代码:
http://zf2.readthedocs.org/en/latest/index.html#userguide
此代码与 mySQL 完美配合。我正在更改数据库配置以改用 Oracle。
下面是我的配置:
- 全局.php
< ?php
返回数组('db' => 数组(
'driver' => 'Oci8', 'host' => 'localhost/orcl', ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', ), ),
);
?>
- local.php(这项工作是因为我创建了一个具有 Oracle 权限的用户“测试”,我使用 PHP 和 SQL 脚本测试了这个用户)
< ?php
返回数组(
'db' => array( 'username' => 'test', 'password' => 'test', ),
);
配置后,我尝试浏览 url,出现错误说“表或视图不存在”。这是 Oracle 错误,这意味着 Zend 连接到 Oracle 但 SQL 语句有问题。
经过一些调试,我看到 sql 语句是:
SELECT "album".* FROM "album"
这是错误的,因为 Oracle 不想接收双引号。
我在文件 /Zend/Db/Adapter/Driver/Oci8/Statement.php 中尝试了一些硬代码,函数 setSql 第 112 行,更改为:
public function setSql($sql)
{
$this->sql = $sql;
$this->sql = "SELECT album.* FROM album";
return $this;
}
(删除查询中的双引号)
这是工作!!!
我认为还有一些其他配置,所以让 Zend 正常工作。
请帮我!谢谢