Php Zend框架:一次一个连接到多个数据库

Php Zend框架:一次一个连接到多个数据库,php,zend-framework,zend-db,Php,Zend Framework,Zend Db,我已经编写了一个脚本,通过我的应用程序ini 我现在遇到的问题是,当我进入下一个数据库时,它仍然从第一个数据库中进行选择,而不是从新数据库中进行选择 是否可以在运行脚本时关闭连接,然后打开新连接。记住这只是一个脚本,我没有引导集。我只是设置了一个自动加载,我可以加载我的模型 在ini的各个部分中循环 try { $db = Zend_Db::factory($section->database->type, $section->database->toAr

我已经编写了一个脚本,通过我的应用程序ini

我现在遇到的问题是,当我进入下一个数据库时,它仍然从第一个数据库中进行选择,而不是从新数据库中进行选择

是否可以在运行脚本时关闭连接,然后打开新连接。记住这只是一个脚本,我没有引导集。我只是设置了一个自动加载,我可以加载我的模型

在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;   
    }
见:

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();

对于任何没有解决方案的人,您所要做的就是:

  • application.ini->在此处定义您的数据库

    resources.multidb.db.adapter=SQLSRV

    resources.multidb.db.host=localhost

    resources.multidb.db.username=root

    resources.multidb.db.password=

    resources.multidb.db.dbname=

    resources.multidb.db.isDefaultTableAdapter=true

    resources.multidb.db2.adapter=SQLSRV

    resources.multidb.db2.host=localhost

    resources.multidb.db2.username=root

    resources.multidb.db2.password=

    resources.multidb.db2.dbname=

    resources.multidb.db2.isDefaultTableAdapter=false

  • 需要设置与第二个DB连接的控制器或型号

    $resource = $bootstrap->getPluginResource('multidb');
    $db1 = $resource->getDb('db1');
    $db2 = $resource->getDb('db2');
    $defaultDb = $resource->getDb();
    
    $db2Ob=Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('multidb')->getDb('db2

  • 现在使用$db2Ob执行查询:

    $select=$db2Ob->select()->从(数组('db2tbl'=>'第二个数据库中的表')、数组('column name'))->其中(条件)

  • 希望这对别人有帮助

    问候,


    Supriya Rajgopal

    如果您设置Zend_注册表::set('db',$db);在每个循环中,您只有注册表中的最后一个循环,有时您必须这样使用:
    $resource['multidb']->getDb('db1')