【问题标题】:Binding params with Raw Query in Laravel在 Laravel 中使用原始查询绑定参数
【发布时间】:2018-08-11 11:25:03
【问题描述】:

我有一个分页列表页面的查询。 SELECT 和 WHERE 部分的某些部分是原始查询。为了避免 sql 漏洞,我需要为此查询使用参数绑定。它适用于 WhereRaw 查询,但不适用于 SELECT 部分。

请在此处查看我的查询:

$aJob  = JobKeywords::where('job_keywords.status', 1)
                        ->where('job_keywords.expiry_date', '>=', $today);
           whereRaw('MATCH(job_title,company_name,skills) AGAINST (? IN BOOLEAN MODE) > 0', [$keyword])
      ->select([DB::Raw('job_keywords.job_id as job_id, ? as candidate_id, 1 as fts_search', [$candidateId]),"job_keywords.location as job_location_name",
        DB::raw('MATCH(job_title,company_name,skills) AGAINST (? IN BOOLEAN MODE) as score', [$keyword]),
        "job_keywords.company_name",
        "job_keywords.job_id as id","job_keywords.job_title",
         "job_keywords.skills",
         "job_keywords.expiry_date",
        "job_keywords.monthly_salary_range_min","job_keywords.monthly_salary_range_max",
        'job_keywords.min_experience_in_year',
        'job_keywords.metadata'])
->orderBy('score', 'DESC')
->paginate(10);

WhereRaw 中的参数绑定工作正常,但在 Select(DB::Raw) 内部不工作。它将抛出SQLSTATE[HY093]: Invalid parameter number error。如果我们调试print_r($aJob->toSql()) and print_r($aJob->getBindings())那么你可以看到参数inside DB::raw没有被计算在内。

有人知道吗?

【问题讨论】:

  • 热切等待答案

标签: laravel laravel-5


【解决方案1】:

你试过selectRaw

$orders = DB::table('orders')
   ->selectRaw('price * ? as price_with_tax', [1.0825])
   ->get();`

【讨论】:

  • 很高兴它帮助了你:)
猜你喜欢
  • 1970-01-01
  • 2018-11-15
  • 2020-05-02
  • 2014-01-18
  • 2021-12-05
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多