2014-02-11 72 views
0

我使用Zend框架甲骨文,我試圖從數據庫中獲得單個值是這樣的:Zend_Db_Adapter會fetchOne返回OCI LOB的對象,而不是字符串

$userId = (int) $this->_getParam('userId'); 

// CREATE TABLE MEMBERS (
// "MEMEBER_ID" NUMBER, 
// "FIRSTNAME" VARCHAR2(20 CHAR), 
// "LASTNAME" VARCHAR2(20 CHAR), 
// "EMAIL" VARCHAR2(40 CHAR), 
// "ABOUT" CLOB 
//) 

$sql = 'SELECT about FROM members WHERE id = :userId'; 

$binds = array (
    'userId' => $userId 
); 

$about = Zend_Registry::get('db')->fetchOne($sql, $binds); 

manualfetchOne()應返回字符串,但是當我傾倒返回的值,它看起來像這樣:

object(OCI-Lob)#1161 (1) { 
    ["descriptor"] => resource(209) of type (oci8 descriptor) 
} 

正如你所看到的,被返回的對象,這是一個獲得手冊 - 「它只返回單個標量值,不是數組或對象。」

如何將其轉換爲字符串?

回答

0

問題出在CLOB列中使用的數據類型about。答案在notes for Oracle adapter中給出,尤其是:

默認情況下,LOB字段作爲OCI-Lob對象返回。您可以通過使用驅動程序選項'lob_as_string'作爲所有請求的字符串檢索它們,或者通過在適配器或語句上使用setLobAsString(boolean)對特定請求進行檢索。

因此,解決辦法其實很簡單,只需要調用setLobAsString(true)fetchOne()之前是這樣的:

$about = Zend_Registry::get('db')->setLobAsString(true)->fetchOne($sql, $binds); 

echo $about; // string 
0

您可以通過添加1線克服這個問題你的application.ini

請加

resources.db.params.driver_options.lob_as_string=true 

這將自動將lob轉換爲字符串。你不需要在Zend中寫任何東西。

相關問題