2010-11-27 3 views
3

J'écris actuellement un script qui sera exécuté en tant que cronjob pour faire des calculs en utilisant des valeurs de la base de données joomla, car ce script ne sera pas accessible via joomla comme un plugin etc j'ai besoin de faire des connexions DB avec. Ce que j'essaie de faire est d'utiliser le framework Joomla pour faire tout le travail (connexion, requêtes, etc) à des fins de sécurité et de portabilité (au lieu d'avoir un autre jeu d'identifiants dans ce script config Joomla)Connectez un script autonome à joomla DB en utilisant framework

je l'ai fait le mieux que je peux, mais quand je lance le script que je reçois l'erreur suivante:

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

J'ai imprimé la variable et fait en sorte que les détails de connexion pour MySQL sont corrects (qu'ils sont).

Mon code actuel est:

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

Répondre

6

essayer cette

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

Cela n'a pas fonctionné pour moi. J'utilise Joomla 2.5 – atpatil11

2

Cela fonctionne pour Joomla 2.5 (et 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(); 

EDIT: Le but est de se connecter ici pour base de données en utilisant déjà configuré la configuration de Joomla et exécuter des requêtes SQL avec DBO de Joomla. De cette façon, nous pouvons faire des choses comme insérer des choses dans les tables sans entrer manuellement les informations d'identification dans notre script.

1

Voici le code joomla bootstrap pour joomla 3.x. Assurez-vous que votre JOOMLA_PATH est correct, il devrait être le chemin de votre installation 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'; 
Questions connexes