使用原始SQL时,Laravel不能在Order By子句中使用参数?

时间:2016-10-09 06:18:31

标签: laravel

我在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子句中使用参数?

2 个答案:

答案 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注入的保护。