2010-11-27 67 views
3

我正在編寫一個腳本,它將作爲cronjob運行,以使用joomla數據庫中的值進行一些計算,因爲此腳本不會通過joomla作爲插件訪問等我需要與它做數據庫連接。將獨立腳本連接到使用框架的joomla DB

我試圖做的是使用Joomla框架來完成所有工作(連接,查詢等)的安全性和可移植性(而不是在這個腳本中擁有另一組登錄憑證,它的全部由的Joomla配置)

我已經做盡我所能,但是當我運行該腳本,我得到以下錯誤:

Database Error: Unable to connect to the database:Could not connect to MySQL 

我已經打印出來的變量,並確信,對MySQL的連接信息是正確的(他們是)。

我當前的代碼是:

<?php 
//init Joomla Framework 
define('_JEXEC', 1); 
define('JPATH_BASE', realpath(dirname(__FILE__).'/..')); 
define('DS', DIRECTORY_SEPARATOR); 

require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 
require_once(JPATH_CONFIGURATION .DS.'configuration.php'); 
require_once (JPATH_BASE .DS.'includes'.DS.'database.php'); 
require_once (JPATH_LIBRARIES .DS.'joomla'.DS.'import.php'); 

//DB Connection 
$Config = new JConfig(); 

$option['driver'] = $Config->dbtype; // Database driver name 
$option['host']  = $Config->host;  // Database host name 
$option['user']  = $Config->user;  // User for database authentication 
$option['password'] = $Config->password; // Password for database authentication 
$option['database'] = $Config->db;  // Database name 
$option['prefix'] = $Config->dbprefix; // Database prefix (may be empty) 

$db = & JDatabase::getInstance($option); 

//DBQuery 
$database =& JFactory::getDBO(); 
$query = "SELECT * FROM #__chronoforms_RD_NonDangerousGoods WHERE cf_id = 4;"; 
$database->setQuery($query); 
$result = $database->query(); 
print_r($result); 
?> 

回答

6

試試這個

<?php 
     //init Joomla Framework 
     define('_JEXEC', 1); 
     define('DS', DIRECTORY_SEPARATOR); 
     define('JPATH_BASE', realpath(dirname(__FILE__).DS.'..')); 


     require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
     require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 

     $mainframe = JFactory::getApplication('site'); 

     //DBQuery 
     $database =& JFactory::getDBO(); 
     $query = "SELECT * FROM #__chronoforms_RD_NonDangerousGoods WHERE cf_id = 4;"; 
     $database->setQuery($query); 
     $result = $database->query(); 
     print_r($result); 
    ?> 
+0

沒有爲我工作。我使用的是Joomla 2.5 – atpatil11 2013-10-04 09:20:47

2

此作品爲Joomla 2.5(3.5)

define('_JEXEC', 1); // This will allow to access file outside of joomla. 
define('DS', DIRECTORY_SEPARATOR); 
define('JPATH_BASE', realpath(dirname(__FILE__) .'/')); 
require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 
$user =JFactory::getUser(); 
$session =& JFactory::getSession(); 
$database = JFactory::getDBO(); 

編輯:這裏的目標是要連接到數據庫使用已經建立的Joomla配置和執行SQL查詢與Joomla的DBO。通過這種方式,我們可以執行諸如在表格中插入東西而無需在腳本中手動輸入憑據的功能

1

這裏是joomla 3.x的joomla bootstrap代碼。確保你的JOOMLA_PATH是正確的,它應該是你的Joomla安裝路徑

//joomla bootstrap 
define('DS', DIRECTORY_SEPARATOR); 
error_reporting(E_ALL); 
date_default_timezone_set('UTC'); 
define('_JEXEC', 1); 
define('JOOMLA_PATH',realpath(dirname(__FILE__).DS.'..'.DS.'..')); 
$_SERVER['HTTP_HOST'] = 'localhost'; 
$_SERVER['REQUEST_METHOD'] = 'GET'; 
$_SERVER['REQUEST_URI'] = ''; 

if (file_exists(JOOMLA_PATH . '/defines.php')) 
{ 
    include_once JOOMLA_PATH . '/defines.php'; 
} 

if (!defined('_JDEFINES')) 
{ 
    define('JPATH_BASE', JOOMLA_PATH); 
    require_once JPATH_BASE . '/includes/defines.php'; 
} 

require_once JPATH_BASE . '/includes/framework.php';