[英]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.