2011-01-07 6 views
2

Ich habe ein Skript geschrieben, das meine Anwendung ini durchläuft.PHP Zend Framework: Verbindung zu mehreren Datenbanken einzeln

Das Problem, das ich jetzt habe, ist, dass, wenn ich zur nächsten Datenbank komme, es immer noch aus der ersten Datenbank auswählt und nicht aus der neuen.

Ist es möglich, eine Verbindung zu schließen und dann eine neue Verbindung zu öffnen, während ein Skript ausgeführt wird. Denken Sie daran, das ist nur ein Skript, ich habe kein Bootstrap gesetzt. Ich habe gerade ein Autoload eingerichtet, damit ich meine Modelle laden kann.

Während durch Abschnitte der Ini-Looping

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

wenn Sie Zend_Registry gesetzt :: set ('db', $ db); bei jeder Schleife haben Sie nur die letzte in der Registry – regilero

Antwort

6

Siehe 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

einige Male müssen Sie wie folgt verwenden: '$ Ressource ['Multidb'] -> getDb ('db1');' –

1

Für alle, die eine Lösung nicht hat, alles, was Sie tun müssen, ist dies:

  1. application.ini -> Definieren Sie Ihre

    resources.multidb hier Datenbanken. db .adapter = SQLSRV

    resources.multidb.db.host = localhost

    resources.multidb.db.username = root

    resources.multidb.db.password =

    Ressourcen .multidb.db.dbname =

    resources.multidb.db.isDefaultTableAdapter = true

    resources.multib. db2 .adapter = SQLSRV

    resources.multidb.db2.host = localhost

    resources.multidb.db2.username = root

    resources.multidb.db2.password =

    Ressourcen .multidb.db2.dbname =

    resources.multidb.db2.isDefaultTableAdapter = false

  2. Controller oder Modell, bei dem Anschluss an 2. DB eingerichtet werden muss

    $ db2Ob = Zend_Controller_Front :: getInstance() -> getParam ('Bootstrap') -> getResource ('Multidb ') -> getDb (' db2 ');

  3. nun diese $ db2Ob verwenden, um Abfragen auszuführen:

    wählen $ = $ db2Ob-> select() -> aus (array ('db2tbl' => 'Tabelle 2. DB'), array (‘ Spaltenname ')) -> wo (Bedingung);

Hoffe, das hilft jemandem.

Grüße,

Supriya Rajgopal