Joomla 2.5 JFactory查询`where`子句不起作用。怎么了?

时间:2013-05-30 02:02:34

标签: php joomla

我一直在编写一个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变量上编写语法时出错了,但我不知道如何解决这个问题。

4 个答案:

答案 0 :(得分:4)

您的$clause变量

$clause = 'title like \'.$params\'';

包含字符串

title like '.$params'

显然,您没有具有该名称的类别。

一些tipps:

  1. 避免转义引号。 如果您对字符串使用了双引号,则可能是您自己已经看到了问题:

    $clause = "title like '.$params'";
    

    正确的语法是

    $clause = "title like '" . $params . "'";
    
  2. 在将字符串提交到数据库之前始终转义字符串。否则您将接受SQL攻击。

    $clause = "title like '" . $db->escape($params) . "'";
    
  3. 使用API​​。数据库对象提供了一种正确转义引用字符串的方法。

    $clause = "title like " . $db->quote($params);
    
  4. 对SQL关键字使用大写。这大大提高了SQL字符串的可读性。

    $clause = "title LIKE " . $db->quote($params);
    
  5. 由于您使用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}";

阅读起来容易得多。