Reputation: 306
I have been writing a Joomla 2.5 module, in helper.php
, I wrote the following code:
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;
}
However, when I retrieve the query results, I always get an empty result. I think I was wrong in writing the syntax on the $clause
variable, but I do not know how to solve the problem.
Upvotes: 0
Views: 1567
Reputation: 571
just use
$clause = "title like {$db->quote($params)}";
or
$clause = "title like {$params}";
it's much easier for reading.
Upvotes: 0
Reputation: 4028
Your $clause
variable
$clause = 'title like \'.$params\'';
contains the string
title like '.$params'
Obviously, you don't have a category with that name.
Some tipps:
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 . "'";
Always escape strings before submitting them to the database. Otherwise you're open to SQL attacks.
$clause = "title like '" . $db->escape($params) . "'";
Use the API. The database object provides a method to properly escape and quote strings.
$clause = "title like " . $db->quote($params);
Use uppercase for SQL keywords. That increases readability of SQL strings significantly.
$clause = "title LIKE " . $db->quote($params);
Since you use LIKE
, I assume you're looking for partial titles. In that case ensure that $params
is surrounded with %
, which is the SQL wildcard character.
Upvotes: 4
Reputation: 8282
try this
$clause = "title like '".$db->escape($params)."'";
or
$clause = 'title like "'.$db->escape($params).'"';
Upvotes: 1
Reputation: 2272
Can you try
$clause = 'title like \'.$params\'';
to
$clause = 'title like "'.$params.'"';
Upvotes: 1