0

我一直在写一个 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

4 回答 4

4

你的$clause变量

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

包含字符串

title like '.$params'

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

一些提示:

  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);
    

由于您使用LIKE,我假设您正在寻找部分标题。在这种情况下,请确保$params被 包围%,这是 SQL 通配符。

于 2013-05-30T11:39:22.920 回答
1

你能试一下吗

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

$clause = 'title like "'.$params.'"';
于 2013-05-30T02:35:31.373 回答
1

试试这个

$clause = "title like '".$db->escape($params)."'";

或者

$clause = 'title like "'.$db->escape($params).'"';
于 2013-05-30T04:29:31.143 回答
0

只需使用

$clause = "title like {$db->quote($params)}";

或者

$clause = "title like {$params}";

阅读要容易得多。

于 2015-12-18T15:51:09.593 回答