2011-01-07 84 views
2

我寫過一個腳本,通過我的應用程序ini。Php Zend框架:一次連接多個數據庫

現在我遇到的問題是,當我到達下一個數據庫時,它仍然從第一個數據庫中選擇而不是新的數據庫。

是否可以關閉連接,然後在運行腳本時打開新的連接。請記住,這只是一個腳本,我沒有設置bootstrap。我只是設置一個自動加載,我可以加載我的模型。

雖然循環通過INI的部分

try { 
     $db = Zend_Db::factory($section->database->type, $section->database->toArray()); 
     Zend_Db_Table::setDefaultAdapter($db); 
     Zend_Registry::set('db', $db); 
    } catch(Zend_Db_Adapter_Exception $e) { 
     continue; 
    } 
+0

如果設置合適的詞彙::設置( 'DB',$分貝);在每一個循環中,你只有註冊表 – regilero 2011-01-07 22:46:09

回答

6

參見Zend_Application_Resource_Multidb

的application.ini

[production] 
resources.multidb.db1.adapter = "pdo_mysql" 
resources.multidb.db1.host = "localhost" 
resources.multidb.db1.username = "webuser" 
resources.multidb.db1.password = "XXXX" 
resources.multidb.db1.dbname = "db1" 

resources.multidb.db2.adapter = "pdo_pgsql" 
resources.multidb.db2.host = "example.com" 
resources.multidb.db2.username = "dba" 
resources.multidb.db2.password = "notthatpublic" 
resources.multidb.db2.dbname = "db2" 
resources.multidb.db2.default = true 

的index.php

$resource = $bootstrap->getPluginResource('multidb'); 
$db1 = $resource->getDb('db1'); 
$db2 = $resource->getDb('db2'); 
$defaultDb = $resource->getDb(); 
+0

中的最後一個,有時你必須像這樣使用:`$ resource ['multidb'] - > getDb('db1');`` – 2013-07-27 07:54:16

1

任何人誰沒有得到一個解決方案,所有你需要做的是這樣的:

  1. 的application.ini - >定義您在這裏的數據庫

    resources.multidb。 分貝 .adapter = SQLSRV

    resources.multidb.db.host =本地主機

    resources.multidb.db.username =根

    resources.multidb.db.password =

    資源.multidb.db.dbname =

    resources.multidb.db.isDefaultTableAdapter =真

    resources.multidb。 DB2 .adapter = SQLSRV

    resources.multidb.db2.host =本地主機

    resources.multidb.db2.username =根

    resources.multidb.db2.password =

    資源.multidb.db2.dbname =

    resources.multidb.db2。isDefaultTableAdapter =假

  2. 控制器或模型,其中需要連接第二DB被設置

    $ db2Ob =在Zend_Controller_Front ::的getInstance() - > getParam( '自舉') - >的getResource('multidb ') - > getDb('db2');

  3. 現在使用這個$ db2Ob執行查詢:

    $選擇= $ db2Ob->選擇() - 從(陣列( 'db2tbl'=> '表在第二DB'),陣列>(」列名')) - > where(condition);

希望這可以幫助別人。

問候,

Supriya Rajgopal