从Joomla 3.2+中的另一个数据库访问数据

时间:2014-06-13 21:53:04

标签: php mysql database joomla

我正在将我的组件从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');,可能是问题吗?

任何可以帮助从原始数据库中检索数据的人都可以使用

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果整个模型只是从外部数据库中获取数据,则可以使用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()中的数据库。 E.g。

$db = JFactory::getDbo();

答案 2 :(得分:1)

我相信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();会给你错误的数据库,你应该这样做:

self:getDbo();

答案 3 :(得分:0)

使用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);

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