我一直在编写一个Joomla 2.5模块,在helper.php
中,我编写了以下代码:
public static function getHello( $params )
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$clause = 'title like \'.$params\'';
$query
->select(array('id','alias','extension'))
->from('#__categories')
->where($clause);
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects.
$results = $db->loadAssocList();
return $results;
}
但是,当我检索查询结果时,我总是得到一个空结果。我认为在$clause
变量上编写语法时出错了,但我不知道如何解决这个问题。
答案 0 :(得分:4)
您的$clause
变量
$clause = 'title like \'.$params\'';
包含字符串
title like '.$params'
显然,您没有具有该名称的类别。
一些tipps:
避免转义引号。 如果您对字符串使用了双引号,则可能是您自己已经看到了问题:
$clause = "title like '.$params'";
正确的语法是
$clause = "title like '" . $params . "'";
在将字符串提交到数据库之前始终转义字符串。否则您将接受SQL攻击。
$clause = "title like '" . $db->escape($params) . "'";
使用API。数据库对象提供了一种正确转义和引用字符串的方法。
$clause = "title like " . $db->quote($params);
对SQL关键字使用大写。这大大提高了SQL字符串的可读性。
$clause = "title LIKE " . $db->quote($params);
由于您使用LIKE
,我假设您正在寻找部分标题。在这种情况下,请确保$params
被%
包围,这是SQL通配符。
答案 1 :(得分:1)
你能试试吗
$clause = 'title like \'.$params\'';
到
$clause = 'title like "'.$params.'"';
答案 2 :(得分:1)
试试这个
$clause = "title like '".$db->escape($params)."'";
或
$clause = 'title like "'.$db->escape($params).'"';
答案 3 :(得分:0)
只需使用
$clause = "title like {$db->quote($params)}";
或
$clause = "title like {$params}";
阅读起来容易得多。