在laravel查询构建器上使用mysql上的变量

问题描述 投票:0回答:4

$key是一个变量可以是空的或什么的。

var key='"<?php echo $_REQUEST['key']; ?>"';

然后通过数据发送到ajax

"ajax": {

          "url": "{{asset("try")}}",
          "type": 'POST',
          "dataType": 'json',
          "async": true,
          "data": {
             key : key,
            },
}

试试控制器

public function try(Request $request){
    $key=$request->key;

    DB::query()
    ->select('A.id','A.upper_p_id','A.key')
    ->from('users as A')
    ->leftjoin('products as B', function($join) {
        $join->on('A.ID', '=', 'B.p_id');
      })
    ->groupBy('A.id','A.upper_p_id','A.key')
    ->where('A.key', 'LIKE', '%'.$key.'%');
    ->get()

    return $result;
}

我从查询调试工具中获取了错误表达式?

LIKE '%\"\"%' 

但是,如果我使用

  ->where('A.n_geography','LIKE', '%'.''.'%');

它是来自查询调试工具的正确句子。

LIKE  '%%'
mysql laravel sql-like query-builder
4个回答
0
投票

好吧 - 你确实在key变量中加入双引号......所以它正确地做了:-)


0
投票

如果你试图从请求获取密钥,理想情况下你不应该使用$ _GET o $ _POST。

public function getData(Request $request){
    $key = $request->key;

    $records = DB::table('users')
    ->leftJoin('products', 'users.id', '=', 'products.p_id')
    ->groupBy('users.id','users.upper_p_id','users.key')
    ->where('users.key', 'LIKE', '%'.$key.'%')
    ->select('users.id','users.upper_p_id','users.key')
    ->get();

    return response()->json($records, 200);

}

但是,如果key变量是一个javascript变量,那么你不能直接在控制器中使用。您需要以某种方式在路由参数或使用ajax请求中传递它。

其次,如果你可以添加条件when,如果$ key存在,那么只做一个where子句:

public function getData(Request $request){
    $key = $request->key;

    $records = DB::table('users')
    ->leftJoin('products', 'users.id', '=', 'products.p_id')
    ->groupBy('users.id','users.upper_p_id','users.key')
    ->when($key, function($q) use($key){
        return $q->where('users.key', 'LIKE', '%'.$key.'%');
    })
    ->select('users.id','users.upper_p_id','users.key')
    ->get();

    return response()->json($records, 200);

}

0
投票

你是双引key。建议的将PHP变量作为JS变量共享的方法是对JSON进行编码,例如:

var key= {!! json_encode(request()->input('key')) !!};

请注意,JS代码中没有必要的引号,因为有效的JSON也是一个有效的JS变量。

另请注意,由于您使用的是Laravel,因此建议您使用刀片标记和request()帮助程序来访问请求参数


0
投票

为了防止SQL注入,最好不要直接连接值,而是将其作为参数传递,所以试试这个:

$key = $request->key;

...
->whereRaw('A.key like ?', ['%' . $key . '%']);

在你的JS中:

var key='<?php echo $_REQUEST['key']; ?>';
© www.soinside.com 2019 - 2024. All rights reserved.