使用框架将独立脚本连接到joomla DB

kwh*_*let 3 php database joomla

我正在编写一个脚本,它将作为cronjob运行,使用joomla数据库中的值进行一些计算,因为这个脚本不会通过joomla作为插件等访问,我需要与它进行数据库连接.

尝试做的是使用Joomla框架来完成所有工作(连接,查询等)以实现安全性和可移植性目的(而不是在此脚本中使用另一组登录凭据,它们全部由Joomla配置处理)

我已经做到了最好,但是当我运行脚本时,我收到以下错误:

Database Error: Unable to connect to the database:Could not connect to MySQL
Run Code Online (Sandbox Code Playgroud)

我打印出变量并确保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);
?>
Run Code Online (Sandbox Code Playgroud)

小智 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);
    ?>
Run Code Online (Sandbox Code Playgroud)