2010-11-27 10 views
3

을 사용하여 독립 실행 형 스크립트를 joomla DB에 연결합니다. joomla 데이터베이스의 값을 사용하여 일부 계산을 수행하는 cronjob으로 현재 실행중인 스크립트를 작성 중입니다.이 스크립트는 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

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(); 

편집이

<?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

2
이 줌라 2.5 작동

(3.5)을 시도해보십시오 여기에서 목표에 연결하는 것입니다 이미 Joomla 구성을 사용하여 데이터베이스를 만들고 Joomla의 DBO로 SQL 쿼리를 실행합니다. 이 방법으로 스크립트에 자격 증명을 수동으로 입력하지 않고 테이블에 물건을 삽입하는 등의 작업을 수행 할 수 있습니다.

1

여기 joomla 3.x 용 joomla 부트 스트랩 코드가 있습니다. 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';