简体   繁体   English

将参数绑定到Db :: raw laravel查询

[英]Binding parameter to Db::raw laravel query

I've got the following raw query: 我有以下原始查询:

$results = Db::select( Db::raw("SELECT HOUR(created_at) as hour, COUNT(*) as count
                       FROM `visited`
                       WHERE created_at >= DATE_SUB(NOW(),INTERVAL 16 DAY)
                       GROUP BY HOUR(created_at)") );

I need to parameterize the day interval, so I tried this: 我需要参数化日间隔,所以我尝试了这个:

$days = 16;
$results = Db::select( Db::raw("SELECT HOUR(created_at) as hour, COUNT(*) as count
                       FROM `visited`
                       WHERE created_at >= DATE_SUB(NOW(),INTERVAL :days DAY)
                       GROUP BY HOUR(created_at)", ["days" => $days]) );

But I am getting the following error: 但是我收到以下错误:

"SQLSTATE[HY000]: General error: 2031 “SQLSTATE [HY000]:一般错误:2031

Apparently the binding is not working. 显然绑定不起作用。 What am I doing wrong? 我究竟做错了什么?

Try this: 试试这个:

$results = DB::select('SELECT HOUR(created_at) as hour, COUNT(*) as count FROM visited WHERE created_at >= DATE_SUB(NOW(),INTERVAL ? DAY) GROUP BY HOUR(created_at)', [16]);

You can even use named bindings: 您甚至可以使用命名绑定:

$results = DB::select('SELECT HOUR(created_at) as hour, COUNT(*) as count FROM visited WHERE created_at >= DATE_SUB(NOW(),INTERVAL :days DAY) GROUP BY HOUR(created_at)', ['days' => 16]);

Don't need to use DB::raw() , just use DB::select() for simple raw select queries: https://laravel.com/docs/master/database#running-queries 不需要使用DB::raw() ,只需使用DB::select()进行简单的原始选择查询: https//laravel.com/docs/master/database#running-queries

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM