簡體   English   中英

從Joomla 3.2+中的另一個數據庫訪問數據

[英]Accessing data from another database in Joomla 3.2+

我正在將組件從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'); 但是,可能是問題所在嗎?

任何人都可以幫助從我的原始數據庫中檢索數據嗎?

如果同一服務器上的舊數據庫和活動的mysql用戶具有訪問權限,則可以使用以下sql查詢:

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

如果整個模型只是從外部數據庫中獲取數據,則可以使用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的代碼在設置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);
}

並獲得數據庫:我認為JFactory::getDbo(); 會給您錯誤的數據庫,您應該這樣做:

self:getDbo();

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

我能夠連接到另一個數據庫就好了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM