1

Zend が SQL ステートメントを作成するために使用する方法は、Oracle では機能しないと思います。

ローカルの Windows PC で Oracle を使用しています。私の PHP は、すでに oci8 拡張機能を備えた Oracle で正しく動作します。以下のリンクに従って構成しました。

http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html

ZF2 を Oracle に接続しようとしています。Zend Web サイトのチュートリアル コードを使用しています。

http://zf2.readthedocs.org/en/latest/index.html#userguide

このコードは mySQL で完全に機能します。代わりに Oracle を使用するようにデータベース構成を変更しています。

以下は私の設定です:

  • グローバル.php

<?php

return array( 'db' => array(

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

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

);

?>

  • local.php (この作業は、Oracle の権限を持つユーザー「test」を作成したためです。このユーザーを 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が正しく動作するように、他の構成があると思います。

私を助けてください!ありがとうございました

4

1 に答える 1

1

同じ問題がここにありました: ZF2 IBM

解決策: quote_identifiers == false:

   '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)      
),
于 2013-08-30T03:21:18.017 に答える