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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41913973/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 15:13:24  来源:igfitidea点击:

Binding parameter to Db::raw laravel query

phpmysqllaraveloctobercmsparameterbinding

提问by Meysam

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?

显然绑定不起作用。我究竟做错了什么?

回答by Artenes Nogueira

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