2009-06-09 20 views
1

我目前使用Zend_Db類來管理我的數據庫連接。 我有幾個關於它的問題。正確使用Zend_Db

  • 它是否巧妙地管理開放連接? (例如,我有一個連接已經打開,是否知道要使用它?還是必須在打開新連接之前不斷檢查它們是否已打開連接?)
  • 我使用以下代碼取結果(FETCH_OBJ方式獲取):

    $final = $result->fetchAll(); 

    return $final[0]->first_name; 

出於某種原因,fetchRow不起作用 - 所以我不斷用使用fetchall,甚至當我只有一個結果(如搜索WHERE id= number id是一個PK)

我的問題是 - 當我使用fetchAll而不是fetchRow時犧牲多少時間/內存,即使只有資源ULT?

  • 我創建了下面的類來管理我的連接:

    require 'Zend/Db.php'; 

    class dbconnect extends Zend_Db 

{ 



function init() 
    { 
     $params = array (...... 

     return Zend_Db::factory ('PDO_MYSQL', $params); 
    } 

} 

,然後我打電話


$handle = dbconnect::init 

$handle->select().... 

這是最好的辦法嗎?有沒有人有更好的主意?

謝謝!

p.s.對不起,這裏的代碼格式出來馬虎。

回答

3

很多問題!

是否管理打開連接 巧妙?

是的,當你運行你的第一個查詢,連接被創建,並且後續查詢使用相同的連接。這是真的如果你重複使用相同的Zend_Db適配器。我通常使用合適的詞彙提供給我的整個應用程序:

$db = Zend_Db::factory(...) // create Db instance 
Zend_Registry::set('db', $db); 

//in another class or file somewhere 
$db = Zend_Registry::get('db'); 
$db->query(...)//run a query 

上面的代碼通常會在應用程序引導。我不打算擴展Zend_Db類來初始化它的實例。我相信關鍵區別在於查詢運行限於1行,並且返回的對象是Zend_Db_Table_Row而不是Zend_Db_Table_Rowset(與行數組類似),並且執行速度並不會很慢。

fetchRow應該沒問題,因此發佈一些代碼不工作,因爲可能在某處出現了錯誤。

0

除了dcaunt的回答是: 使用fetchall返回數組或Zend_Db_Talbe_Rowset - 這取決於如果執行$zendDbTableModel->fetchAll()$dbAdapter->fetchAll() 也是一樣fetchRow()上。如果您未能使fetchRow適用於型號,則更容易使用$model->getAdapter()->fetchRow($sqlString);