我正试图在Laravel中对我的MySQL数据库表进行全文搜索。我有我的搜索控制器看起来像这样:类SearchController扩展BaseController {
public function postSearch()
{
if (Input::has('search')) {
$q = Input::get('search');
$q = urlencode($q);
return Redirect::to('/search/'.$q);
}
else
//TODO: Handle this error
}
public function getSearch($query)
{
$query = urldecode($query);
$products = Product::whereRaw(
'MATCH(product_name,product_desc,product_category) AGAINST(? IN BOOLEAN MODE)',
array($query)
)->paginate(5);
return View::make('searchResults', array('products' => $products, 'query' => $query));
}
我有单独的get/post函数,因为我被告知,当使用get请求完成搜索时,分页更容易处理;因此,我使用路由Route::get('/search/{query}', 'SearchController@getSearch');
来显示搜索结果。
然而,搜索查询似乎没有被正确转义。我使用urlencode
来防止URL中有特殊字符,但是当执行查询时,我仍然可以通过搜索);
或其他带括号或分号的字符串来导致错误。(我得到SQLSTATE[42000]: Syntax error or access violation:
错误)。
我执行我的全文查询不正确,或者有一些函数我可以调用来"准备"我的查询字符串?
在输入查询上使用e()
函数似乎达到了目的。我猜这和htmlentities()
我不确定我的urlencode
是否仍然是必要的,但它似乎工作得很好。