gpt4 book ai didi

php - 如何从外部php文件连接joomla3 DB?

转载 作者:行者123 更新时间:2023-11-29 08:08:01 26 4
gpt4 key购买 nike

我在模块内创建了外部 php 文件,并且使用了一些 sql 查询,首先我尝试使用 php/mysql 并且它有效,然后我尝试将其转换为 joomla 样式。但是当我使用 joomla 框架进行数据库连接时出现错误

旧代码:FROM PHP

mysql_connect("localhost","root","");
mysql_select_db("1234");

$searchp=$_GET["term"];
$query=mysql_query("SELECT * FROM sltdb_cddir_content where title like '%".$searchp."%'AND categories_id=82 order by title ASC ");
$json=array();
while($display=mysql_fetch_array($query)){
$json[]=array(
'value'=> $display["title"],
'label'=>$display["title"]
);
}

echo json_encode($json);

新代码:JOOMLA3

    define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT'] . DS . '');

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

//create application
$mainframe = &JFactory::getApplication('site');
$db = JFactory::getDBO();

// Create a new query object.
$query = $db -> getQuery(true);
$searchp = $_GET["term"];
$query -> select($db -> quoteName(array('title')));
$query -> from($db -> quoteName('sltdb_cddir_content'));
$query -> where($db -> quoteName('title') . ' LIKE ' . $db -> quote('\'$searchp.%\''));
$query -> order('ordering ASC');

$db -> setQuery($query);
$json = array();
while ($display = mysql_fetch_array($query)) {
$json[] = array('value' => $display["title"], 'label' => $display["title"]);
}

echo json_encode($json);

一旦转换为 joomla 中的代码后,就会出现错误

*"mysql_fetch_array() 期望参数 1 是资源,对象在 "*

中给出

请告诉我哪里做错了。

编辑01

    define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT'] . DS . '');

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

//create application
$mainframe = &JFactory::getApplication('site');
$searchp = $_GET["term"];
$db = JFactory::getDBO();

// Create a new query object.
$query = $db -> getQuery(true);

$query -> select($db -> quoteName(array('title')));
$query -> from($db -> quoteName('sltdb_cddir_content'));
$query -> where($db -> quoteName('title') . ' LIKE ' . $db -> quote('\'$searchp.%\''));
$query->where($db->quoteName('categories_id')." = ".$db->quote(82));
$query -> order('ordering ASC');

$db->setQuery($query);

$results = $db-> loadAssocList();
$json = array();
foreach($results as $json_result) {
$json[] = array('value' => $json_result["title"], 'label' => $json_result["title"]) ;
}

echo json_encode($json);

最佳答案

您正在将 Joomla 的“SDK”与纯 PHP 方法混合使用来进行数据访问,因此我建议远离这种混合:

1) mysql_fetch_array 将被弃用,实际上它期望第一个参数是使用 mysql_connect 调用创建的 mysql 连接,这就是为什么错误说第一个参数期望是一个资源,你可以检查文档在这里http://www.php.net/mysql_fetch_array .

2)由于您使用 joomla 中的数据访问类来获取连接并构建查询,这很好,我建议继续使用它来获取结果并循环它们,就像这样。

// Reset the query using our newly populated query object.
$db->setQuery($query);

// Load the results as a list of associated arrays.
$results = $db-> loadAssocList();
$json = array();
foreach($results as $json_result) {
$json[] = array('value' => $json_result["title"], 'label' => $json_result["title"])
}

有关 Joomla 数据库访问的更多信息:http://docs.joomla.org/Selecting_data_using_JDatabase

关于php - 如何从外部php文件连接joomla3 DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com