将参数绑定到 Db::raw laravel 查询
Binding parameter to Db::raw laravel 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)") );
我需要参数化天间隔,所以我尝试了这个:
$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]) );
但我收到以下错误:
"SQLSTATE[HY000]: General error: 2031
显然绑定无效。我做错了什么?
试试这个:
$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]);
您甚至可以使用命名绑定:
$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]);
不需要使用 DB::raw()
,只需使用 DB::select()
进行简单的原始 select 查询:https://laravel.com/docs/master/database#running-queries
我有以下原始查询:
$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)") );
我需要参数化天间隔,所以我尝试了这个:
$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]) );
但我收到以下错误:
"SQLSTATE[HY000]: General error: 2031
显然绑定无效。我做错了什么?
试试这个:
$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]);
您甚至可以使用命名绑定:
$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]);
不需要使用 DB::raw()
,只需使用 DB::select()
进行简单的原始 select 查询:https://laravel.com/docs/master/database#running-queries