2012-02-13 82 views
1

在我們的項目中的application.ini指定的數據庫連接的一個是Zend的數據庫連接

resources.db.adapter = Mysqli 
resources.db.params.host = localhost 
resources.db.params.username = root 
resources.db.params.password = '' 
resources.db.params.dbname = zf_tutorial 

但我需要調用從另一個文件中的主機,用戶名,密碼,數據庫。這個怎麼做?

+0

你是什麼意思,完全由「從另一個文件」? – Songo 2012-02-13 11:50:45

回答

0

這裏接受的答案不是獲取數據庫對象的好方法,它應該像application最初一樣在application.ini中設置。

如果你想獲得另一個db對象的實例,你有幾個選項;你可以做@RockyFord建議,或者你可以從任何像這樣的控制器db對象: -

$db = $this->getInvokeArg('bootstrap')->getResource('db'); 

如果你想走得更遠,並有機會獲得connection details(我無法想象,你爲什麼會再次需要它們),那麼你可以從這樣的數據庫對象讓他們: -

$dbConfig = $db->getConfig(); 

或者實際上: -

$dbConfig = $this->getInvokeArg('bootstrap')->getResource('db')->getConfig(); 

,這將給你包含連接數據的數組,你可以嘗試此操作並執行var_dump($dbConfig);以查看詳細信息。

如果需要,這是一種更加健壯的訪問數據庫對象的方式,但如果您需要在多個位置執行此操作,則需要花費很長時間仔細查看整個代碼設計,特別是如果您按照此處所述訪問連接詳細信息。

+0

HI vascowhite, 我的要求是,我們有一個開源項目編碼在正常的php4。我們現在計劃用zend框架更新這個項目。所以目前我們不能整體升級。所以計劃一步一步升級。所以最初我們必須使用現有的項目數據庫連接。但是這個db連接是動態的。這個項目進一步分爲子域,所以基於子域的數據庫將會改變(用戶和密碼將保持不變)。所以db的每個子域都會改變。 – Pradeep 2012-02-14 05:34:55

0

通常情況下,連接到數據庫中的index.php設置:

// TODO: $adapter and $params from custom place, not hardcoded 
$adapter = 'pdo_mysql'; 
$params = array(
    'host' => 'localhost', 
    'username' => 'root', 
    'password' => '', 
    'dbname' => 'mydb' 
); 
$db = Zend_Db::factory($adapter, $params); 
Zend_Db_Table_Abstract::setDefaultAdapter($db); 

在此代碼$適配器和$ PARAMS是硬編碼。你可以從你的自定義文件中獲得$ adapter和$ params。

2
同在的application.ini調用默認的適配器您的數據庫設置通常

是微不足道
$db = Zend_Db_Table::getDefaultAdapter();
添加resources.db.isDefaultTableAdapter = true到的application.ini確保你調用正確的適配器。
有很多情況下,這可能無法正常工作,其中大多數涉及自舉。