2011-01-07 15 views
2

私のアプリケーションiniを通るスクリプトを書いています。PHP Zend Framework:一度に複数のデータベースに接続する

私が今問題を抱えているのは、次のデータベースを取得したときに、最初のデータベースから選択したもので、新しいデータベースではありません。

スクリプトを実行しているときに接続を閉じてから新しい接続を開くことは可能ですか?私はブートストラップが設定されていないことを覚えておいてください。私はちょうど私のモデルを読み込むことができるように自動ロードをセットアップします。

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

あなた法は、Zend_Registry ::セット( 'DB'、$デシベル)を設定している場合。すべてのループで、あなたはレジストリの最後のものだけを持っています – regilero

答えて

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');' –

1

解決策を持っていない誰のために、あなたがしなければならないすべてはこれです:

  1. のapplication.ini - ここ>を定義してデータベース

    resources.multidb。 デシベル .adapter = SQLSRV

    resources.multidb.db.host = localhostを

    resources.multidb.db.username =ルート

    resources.multidb.db.password =

    リソース.multidb.db.dbname =

    resources.multidb.db.isDefaultTableAdapter =真

    リソース。 DB2 .adapter = SQLSRV

    resources.multidb.db2.host = localhostを

    resources.multidb.db2.username =ルート

    resources.multidb.db2.password =

    リソースdb2.dbname =

    resources.multidb.db2。> getParam( 'ブートストラップ') - - >のgetResource( 'multidb第二DBへの接続が

    $ db2Ob = Zend_Controller_Frontを::のgetInstance()に設定する必要がありますisDefaultTableAdapter = falseを

  2. コントローラやモデル') - > getDb(' db2 ');

  3. 次にクエリを実行するために、この$のdb2Obを使用:

    $ = $ db2Ob->選択()を選択する - '2 DBのテーブル'>から(配列( 'db2tbl' =>)を、アレイ(」列名 ')) - >ここで(条件);

希望すると、誰かに役立ちます。

よろしく、

Supriya Rajgopal

関連する問題