【问题标题】:How to get records from outside database in Zend?Zend 如何从外部数据库中获取记录?
【发布时间】:2011-05-25 09:55:05
【问题描述】:

我在 application.ini 中为数据库使用以下配置;

resources.db.adapter = "Mysqli"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = "root"
resources.db.params.dbname = "dbname"
resources.db.params.charset = "utf8"

之后使用标准的 Model/Mapper/DbTable 类访问数据库,如 this

现在我想访问其他一些数据库,但表结构与本地数据库相同。如何为我想要显示其他数据库数据的特定控制器/操作切换我的数据库。

谢谢。

【问题讨论】:

    标签: php database zend-framework


    【解决方案1】:

    您可以使用Zend_Application_Resource_Multidb

    在标题Different user/host 下有一个用法示例here

    Stackoverflow 上的类似问题

    1. Can't connect to external database with Zend Framework but mysql connect works.

    编辑:我还发现,即使我的模型中有以下行从 Zend_Db_Table_Abstract 继承,它也没有连接到远程数据库。

    protected $_schema  = 'otherdb';
    protected $_adapter = 'db_remote'; 
    

    所以我在 Zend_Db_Table_Abstract 中检查了这个函数

    protected function _setupDatabaseAdapter()
        {
            if (! $this->_db) {
                $this->_db = self::getDefaultAdapter();
                if (!$this->_db instanceof Zend_Db_Adapter_Abstract) {
                    require_once 'Zend/Db/Table/Exception.php';
                    throw new Zend_Db_Table_Exception('No adapter found for ' . get_class($this));
                }
            }
        }
    

    如果对你来说也一样,请将以下几行添加到你的构造函数中:

    public function __construct() {
        $front = Zend_Controller_Front::getInstance();
        $bootstrap = $front->getParam('bootstrap');
        $resource = $bootstrap->getPluginResource('multidb');
        $this->_db = $resource->getDb('chdpg');
    }
    

    【讨论】:

    • 我关注this。它正在使用多个数据库,但两个数据库都在同一台服务器上。但是当两个数据库位于不同的服务器上时,就会导致问题并且无法访问远程数据库。
    猜你喜欢
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多