我在Laravel中找到了一个错误吗?
我的代码:
$this->products = DB::select("select * from products WHERE build_datetime > ? ORDER BY ?, ? limit 3", [$this->oldDate, 'value', 'desc']);
它将无法运行。但是,如果我删除Order By子句中的参数:
$this->products = DB::select("select * from products WHERE build_datetime > ? ORDER BY value desc limit 3", [$this->oldDate]);
它会很好用。
如果Laravel在使用原始SQL时无法在Order By子句中使用参数?
答案 0 :(得分:1)
很可能你没有发现错误
您想要使用
DB::raw(...);
不是
DB::select(...);
答案 1 :(得分:0)
Laravel文件:
运行原始SQL查询
配置数据库连接后,可以使用数据库外观运行查询。 DB facade为每种类型的查询提供了方法:select,update,insert,delete和statement。
运行选择查询
要运行基本查询,我们可以在数据库外观上使用select方法:
命名空间App \ Http \ Controllers;
使用DB; 使用App \ Http \ Controllers \ Controller;
类UserController扩展Controller { / ** *显示所有应用程序用户的列表。 * * @return回复 * / 公共职能指数() { $ users = DB :: select(' select * from users where active =?',[1]);
return view('user.index', ['users' => $users]);
}
} 传递给select方法的第一个参数是原始SQL查询,而第二个参数是需要绑定到查询的任何参数绑定。通常,这些是where子句约束的值。参数绑定提供了针对SQL注入的保护。