Подключите автономный скрипт к базе данных Joomla с помощью фреймворка - PullRequest
3 голосов
/ 27 ноября 2010

В настоящее время я пишу скрипт, который будет запускаться как cronjob для выполнения некоторых вычислений с использованием значений из базы данных joomla, потому что к этому скрипту нельзя получить доступ через joomla как плагин и т. Д. Мне нужно с ним подключиться к БД .

То, что я пытаюсь сделать, - это использовать инфраструктуру 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);
?>

Ответы [ 4 ]

6 голосов
/ 17 июня 2011

попробуйте

   <?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);
    ?>
2 голосов
/ 05 октября 2013

Это работает для 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-запросов с DBO Joomla. Таким образом, мы можем делать такие вещи, как вставка данных в таблицы без ручного ввода учетных данных в нашем скрипте.

1 голос
/ 14 марта 2016

вот код начальной загрузки joomla для joomla 3.x.Убедитесь, что ваш 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';
0 голосов
/ 16 ноября 2018

Чтобы исправить предупреждение об устаревании запроса, используйте JDatabaseDriver вместо JDatabase:

$query = "SELECT * FROM #__chronoforms_RD_NonDangerousGoods WHERE cf_id = 4;";       
$database =& JFactory::getDbo();
$database->setQuery($query);
$result = $database->execute();
print_r($result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...