在Laravel中转义whereRaw查询

时间:2014-07-22 20:53:31

标签: php mysql laravel

我正在尝试在Laravel中的一个MySQL数据库表上进行全文搜索。我的搜索控制器看起来像这样:     class SearchController extends \ 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:个错误。

我是否错误地执行了我的全文查询,或者是否有一些函数我可以调用'准备'我的查询字符串?

1 个答案:

答案 0 :(得分:-2)

在输入查询上使用e()函数似乎可以解决问题。我想这与htmlentities()

相同

我不确定我的urlencode是否仍然有必要,但似乎可以正常工作。