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が正しく動作するように、他の構成があると思います。
私を助けてください!ありがとうございました