【问题标题】:Accessing data from another database in Joomla 3.2+在 Joomla 3.2+ 中从另一个数据库访问数据
【发布时间】:2014-06-13 21:53:03
【问题描述】:

我正在将我的组件从 Joomla 1.7 升级到 Joomla 3.3,并且必须保留原始数据库。因此,我需要从另一个数据库作为安装数据库访问显示数据。我在 Joomla 2.5 中尝试过一种我以前多次使用过的方法,但这次我似乎无法正确使用它。

getListQuery() 方法(覆盖modellist 方法)中的模型中,我使用以下代码访问要从中获取数据的数据库:

$dbOptions = getDbOptions();
$db = & JDatabase::getInstance($dbOptions); 

我的旧数据库的连接详细信息包含在$dbOptions 中。

我继续使用下面的代码:

$query = $db -> getQuery(true);
$query -> select('*') -> from('table');
return $query;

我确实在开头包含以下内容:

jimport('joomla.application.component.modellist');

modellist 扩展了 JModelLegacy,因此我相信它使用以下内容:

/libraries/legacy/model/list.php

但是它给了我一个错误,表 newDatabase.table 没有退出,因此我使用的方法没有连接到我的旧数据库以从 oldDatabase.table 中检索数据。

我不确定是否包含jimport('joomla.application.component.modellist');,这可能是问题吗?

谁能帮助从我的原始数据库中检索数据?

【问题讨论】:

    标签: php mysql database joomla


    【解决方案1】:

    如果同一服务器上的旧数据库和活跃的 mysql 用户可以访问它,你可以使用这样的 sql 查询:

    $query = $db -> getQuery(true);
    $query -> select('*') -> from('old_database.table');
    return $query;
    

    【讨论】:

    • 这可行,但在我的情况下最好使用其他答案,因为我有许多模型,我可以将数据库的详细信息放在一个文件中,这样更容易获得数字是有原因的,尤其是当我不得不再次移动组件时。
    【解决方案2】:

    如果整个模型只是从外部数据库中获取数据,您可以使用 JDatabase->setDbo 将默认数据库对象替换为您的自定义对象。

    public function __construct($config = array())
    {
        parent::__construct($config);
    
        $options = array();
        $options['driver']   = 'mysqli';
        $options['host']     = 'localhost';
        $options['user']     = 'username';
        $options['password'] = 'password';
        $options['database'] = 'database';
        $options['prefix']   = 'jos_';
    
        $db = JDatabase::getInstance( $options );
        parent::setDbo($db);
    }
    

    现在您应该可以像使用默认数据库一样访问 getListQuery() 中的数据库了。例如

    $db = JFactory::getDbo();
    

    【讨论】:

    • Adam B@please help 我是 joomla 的新手,让我知道我必须在哪里编写此代码
    • 这取决于您想要这些数据的位置。你想达到什么目的?
    【解决方案3】:

    我相信 Adam B 的代码在设置 DB 方面可以有所改进。

    public function __construct($config = array())
    {
        $options = array(
            'driver'   => 'mysqli',
            'host'     => 'localhost',
            'user'     => 'username',
            'password' => 'password',
            'database' => 'database',
            'prefix'   => 'jos_'
        );
    
        //parent construct will handle setting the DB
        $config['dbo']=JDatabase::getInstance( $options );
    
        parent::__construct($config);
    }
    

    获取 DB:我认为 JFactory::getDbo(); 会给你错误的 DB,你应该这样做:

    self:getDbo();
    

    【讨论】:

      【解决方案4】:

      使用 Joomla 2.5,这种方法对我有用:

       $option = array();
         $option['driver']   = 'mysql';
         $option['host']     = 'localhost';
         $option['user']     = 'XXXXXXXX';
         $option['password'] = 'XXXXXXXX';
         $option['database'] = 'wordpress';
         $option['prefix']   = 'jtt_';
         $db = JDatabase::getInstance( $option );
         $query = "select * from #__categories";
         $db->setQuery($query);
      

      我能够很好地连接到另一个数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多