在zend framework 1.12中设置一个非默认的db适配器

时间:2014-02-13 12:33:44

标签: sql-server zend-framework database-connection

我有一个非常具体的问题,但我是一个使用zend框架的niewbie所以我不知道这个数据库适配器如何作为配置工作,但我已经使用默认设置建立了数据库连接zend的适配器,它很成功。现在我要在同一个应用程序中为两个不同的数据库设置两个不同的数据库连接。所以我采取了我的application.ini,我写了以下几行:

 ;connessione al db
 resources.db.adapter = pdo_mssql
 resources.db.params.host = "ip"
 resources.db.params.username = user
 resources.db.params.password = pwd
 resources.db.params.dbname = NAME
 resources.db.isDefaultTableAdapter = true
 resources.db.params.pdoType = dblib

 ;connessione al db1
 resources.db1.adapter = pdo_mssql
 resources.db1.params.host = "ip"
 resources.db1.params.username = user
 resources.db1.params.password = pwd
 resources.db1.params.dbname = NAME
 resources.db1.isDefaultTableAdapter = false
 resources.db1.params.pdoType = dblib
然后我去了我的动作控制器,我写道:

    $db = Zend_Registry::get ( 'db' );
    $result = $db->fetchRow("SELECT [Sell-to Customer No_] FROM dbo.SyncroPlanningTable WHERE id='".$id);
    $rag_soc=$result->{"Sell-to Customer No_"};
    $db1 = Zend_Registry::get ( 'db1' );
    $result1 = $db1->fetchRow("SELECT [No_],[Name],[Address],[City],[Contact],[Name],[Phone] FROM `dbo.SOS$Customer` WHERE No_ = '".$rag_soc."'");

我得到的错误如下:

 Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Unable to resolve plugin "db1";

更新

我的bootstrap.php是:

    $resource = $this->getPluginResource ( "db" );
    $db = $resource->getDbAdapter ();
    $db->setFetchMode ( Zend_Db::FETCH_OBJ );

    Zend_Db_Table_Abstract::setDefaultAdapter ( $db );
    Zend_Registry::set ( "db", $db );

我该怎么改变它?在你给我的手册页中没有提到它。

2 个答案:

答案 0 :(得分:2)

resources.db引用Zend_Application_Resource_Db,因此“db”此处不是变量名称。

您应该使用Zend_Application_Resource_Multidb来支持多个数据库连接:

http://framework.zend.com/manual/1.12/en/zend.application.available-resources.html#zend.application.available-resources.multidb

答案 1 :(得分:1)

您的代码期望数据库适配器位于注册表中,因此您需要从multiDB资源中获取它们并存储它们:

$multiDB = $this->getPluginResource('multidb');

Zend_Registry::set('db1', $multiDB->getDb('db1');
Zend_Registry::set('db2', $multiDB->getDb('db2');

另外,这一行:

Zend_Db_Table_Abstract::setDefaultAdapter ( $db );

可以删除,因为您在application.ini中指定了默认适配器。