2011-01-07 82 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