Joomla 2.5 JFactory запыт `where` пункт не працуе. Што не так?

Я пішу модуль 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;
}

Аднак, калі я атрымаць вынікі запыту, я заўсёды атрымліваю пусты вынік. Я думаю, што я быў няправы ў напісанні сінтаксісу на $ п зменнай, але я не ведаю, як вырашыць гэтую праблему.

0
Што ўнутры $ Params? Ці можаце вы паказаць var_dump ($ Params);? А назва вы шукаеце ў базе дадзеных?
дададзена аўтар user4035, крыніца

8 адказы

Ваш $ пункт пераменная

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

змяшчае радок

title like '.$params'

Відавочна, што вы не маеце катэгорыі з гэтым імем.

Некаторыя Tipps:

  1. Avoid escaping of quotes. If you had used double quotes for the string, you might have seen the problem yourself:

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

    The correct syntax is

    $clause = "title like '" . $params . "'";
    
  2. Always escape strings before submitting them to the database. Otherwise you're open to SQL attacks.

    $clause = "title like '" . $db->escape($params) . "'";
    
  3. Use the API. The database object provides a method to properly escape and quote strings.

    $clause = "title like " . $db->quote($params);
    
  4. Use uppercase for SQL keywords. That increases readability of SQL strings significantly.

    $clause = "title LIKE " . $db->quote($params);
    

Так як вы карыстаецеся LIKE , я мяркую, што вы шукаеце частковымі назвы. У гэтым выпадку неабходна пераканацца, што $ Params акружаны % , які з'яўляецца SQL сімвал падстаноўкі.

4
дададзена
дзякуй nibra ... цяпер я разумею.
дададзена аўтар Ibnu Syuhada, крыніца

Ваш $ пункт пераменная

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

змяшчае радок

title like '.$params'

Відавочна, што вы не маеце катэгорыі з гэтым імем.

Некаторыя Tipps:

  1. Avoid escaping of quotes. If you had used double quotes for the string, you might have seen the problem yourself:

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

    The correct syntax is

    $clause = "title like '" . $params . "'";
    
  2. Always escape strings before submitting them to the database. Otherwise you're open to SQL attacks.

    $clause = "title like '" . $db->escape($params) . "'";
    
  3. Use the API. The database object provides a method to properly escape and quote strings.

    $clause = "title like " . $db->quote($params);
    
  4. Use uppercase for SQL keywords. That increases readability of SQL strings significantly.

    $clause = "title LIKE " . $db->quote($params);
    

Так як вы карыстаецеся LIKE , я мяркую, што вы шукаеце частковымі назвы. У гэтым выпадку неабходна пераканацца, што $ Params акружаны % , які з'яўляецца SQL сімвал падстаноўкі.

4
дададзена
дзякуй nibra ... цяпер я разумею.
дададзена аўтар Ibnu Syuhada, крыніца

паспрабуйце гэта

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

або

$clause = 'title like "'.$db->escape($params).'"';
1
дададзена
што ўтрыманне $ Params яго змяшчае спецыяльныя знакі ці QTS паспрабаваць $ db-> ўцёкі ($ Params).
дададзена аўтар Jobin Jose, крыніца
не працуюць адзін
дададзена аўтар Ibnu Syuhada, крыніца

паспрабуйце гэта

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

або

$clause = 'title like "'.$db->escape($params).'"';
1
дададзена
што ўтрыманне $ Params яго змяшчае спецыяльныя знакі ці QTS паспрабаваць $ db-> ўцёкі ($ Params).
дададзена аўтар Jobin Jose, крыніца
не працуюць адзін
дададзена аўтар Ibnu Syuhada, крыніца

Вы можаце паспрабаваць

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

у

$clause = 'title like "'.$params.'"';
1
дададзена
тут памылка сінтаксісу ў $ п = "назва, як« »$ Params." '; Вы прапусцілі адзін «» на правы канец $ п = 'назвай як "' Params $ .. '"';
дададзена аўтар Jobin Jose, крыніца
@JobinJose Дзякуй за выпраўленне :)
дададзена аўтар Yogus, крыніца

Вы можаце паспрабаваць

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

у

$clause = 'title like "'.$params.'"';
1
дададзена
тут памылка сінтаксісу ў $ п = "назва, як« »$ Params." '; Вы прапусцілі адзін «» на правы канец $ п = 'назвай як "' Params $ .. '"';
дададзена аўтар Jobin Jose, крыніца
@JobinJose Дзякуй за выпраўленне :)
дададзена аўтар Yogus, крыніца

проста выкарыстоўваць

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

або

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

it's much easier fабо reading.

0
дададзена

проста выкарыстоўваць

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

або

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

it's much easier fабо reading.

0
дададзена