2013-05-31 90 views
3

我正在使用Zend Framework 2進行應用程序開發。整個應用程序基於IBM Informix數據庫。Zend Framework 2查詢中的雙引號

數據庫配置看起來是這樣的:

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 \選擇對象查詢數據庫,查詢總是得到報價,這是不應該的,因爲Informix的可以」再處理查詢。

預期查詢字符串:

SELECT column1, column2 FROM table 

Zend的生成查詢字符串:

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

經過一番研究,我發現類似的情況,但既不解決方案是可以接受的。這裏的問題是,我必須通過一個Zend \ Db \ Sql \ Select對象,因此通過$ dbAdapter-> query($ sql)查詢數據庫與原始的sql是不可能的。

有沒有辦法可以禁用報價(例如在數據庫配置中)?

一些tipps將非常讚賞。 在此先感謝

+0

你爲什麼要用Select來生成SQL,但是然後運行原始查詢?要麼運行原始查詢,要麼使用Select構建器爲你執行它... – Andrew

+0

你missunderstood - 我寫道,我必須通過一個Zend \ Db \ Sql \ Select對象,所以通過原始查詢查詢數據庫是別無選擇。 – kinkee

+1

答案可能在這裏http://stackoverflow.com/questions/15813544/zf2-zend-db-adapter-platformgetquoteidentifiersymbol – sroes

回答

0

如果您希望Informix識別該表示法,則需要設置環境變量DELIMIDENT,以便服務器知道將這種雙引號字符串作爲標識符而不是字符串。

有很多種方法可以做到這一點;這最好取決於你的系統。它看起來像你使用Windows而不是Unix。有一個SETNET32實用程序可以設置環境變量。在Unix上(不確定Windows),你可以添加DELIMIDENT 1$HOME/.informix$INFORMIXDIR/etc/informixrc(非常規,但應該工作)。你可以通過shell設置一個env var;您可以將其指定爲連接屬性。

Windows不是我的專業領域。

1

您可以禁用引用標識符。像這樣

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文檔。