2013-04-04 43 views
1

我想Zend用于构建sql语句的方式不适用于Oracle。Zend Framework 2以不正确的格式向Oracle查询

我在我的本地Windows PC中使用Oracle。 我的PHP工作正确与Oracle已经与OCI8扩展,我配置了下面的链接如下:

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。

下面是我的配置:

  • global.php

< PHP

返回阵列( '分贝'=>数组(

'driver'   => 'Oci8', 
    'host'   => 'localhost/orcl', 
), 

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

);

?>

  • local.php(这工作,因为我创建了权限的用户 '测试' 在甲骨文,我测试了PHP和SQL脚本,该用户)

<?PHP

回报阵列(

'db' => array(
    'username' => 'test', 
    'password' => 'test', 
), 

);

配置完成后,我尝试浏览网址,错误出现,说“表或视图不存在”。这是Oracle错误,它表示Zend连接到Oracle,但SQL语句中出现错误。

一些调试后,我看到了sql语句是:

SELECT "album".* FROM "album" 

这是错误的,因为甲骨文不愿意接受双引号。

我试图在文件/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正常工作。

请帮帮我!谢谢

+0

你试过表名称设置为大写?似乎来自一个快速的谷歌几次。 – 2013-04-04 10:24:07

+0

嗨,我试过了。我认为问题在于Oracle不会收到双引号,但是Zend构建的声明有这些。 – 2013-04-04 10:37:39

+0

@AydinHassan:嗨,你是对的。将所有表名称和字段名称更改为大写字母将使代码生效!谢谢 – 2013-04-08 02:33:58

回答

1

同样的问题在这里:ZF2 IBM

解决方案:quote_identifiers ==假:

'db' => array(
    'driver' => $dbParams['driver'], 
    'connection_string' => $dbParams['database'], 
    'username' => $dbParams['username'], 
    'password' => $dbParams['password'], 
    'character_set' => $dbParams['character_set'], 
    'platform_options' => array('quote_identifiers' => false)  
),