【问题标题】:Escaping whereRaw query in Laravel在 Laravel 中转义 whereRaw 查询
【发布时间】:2014-07-22 20:53:30
【问题描述】:

我正在尝试在 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: 错误)。

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

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    在输入查询上使用e() 函数似乎可以解决问题。我猜这和htmlentities()是一样的

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

    【讨论】:

      猜你喜欢
      • 2019-09-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2019-10-22
      • 2022-01-09
      • 1970-01-01
      • 2017-04-12
      相关资源
      最近更新 更多