3

アプリケーション開発には Zend Framework 2 を使用しています。アプリケーション全体は、IBM Informix データベースに基づいています。

データベース構成は次のようになります。

return array(
'db' => array(
    'driver'         => 'Pdo',
    'dsn'            => 'dsn:connection:string',
    'driver_options' => array(
    ),
),
'service_manager' => array(
    'factories' => array(
        'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
    ),
),
);

Zend\Db\Sql\Select オブジェクトをインスタンス化してデータベースにクエリを実行すると、クエリが常に引用符で囲まれますが、Informix がクエリを処理できなくなるため、これは発生するべきではありません。

予期されるクエリ文字列:

SELECT column1, column2 FROM table

Zend が生成したクエリ文字列:

SELECT "column1", "column2" from "table"

いくつかの調査の結果、同様のケースが見つかりましたが、どちらの解決策も受け入れられませんでした. ここでの問題は、Zend\Db\Sql\Select オブジェクトを渡す必要があるため、$dbAdapter->query($sql) を介して生の SQL でデータベースをクエリすることはできません。

引用を無効にする方法はありますか(データベース構成などで)?

いくつかのヒントをいただければ幸いです。前もって感謝します

4

2 に答える 2

2

引用識別子を無効にすることができます。このような

use Zend\Db\Adapter\Adapter as DbAdapter;

// DB2 Connection
$adapter = new DbAdapter(array(
    'driver' => 'IbmDb2',
    'database' => '*LOCAL',
    'username' => '',
    'password' => '',
    'driver_options' => array(
        'i5_naming' => DB2_I5_NAMING_ON,
        'i5_libl' => 'LIB1 LIB2 LIB3'
    ),
    'platform_options' => array('quote_identifiers' => false)
);

Zend Framework のドキュメントから引用。

于 2013-07-06T15:26:20.837 に答える