如何在Laravel 5.2中使用预备语句

时间:2016-05-26 07:08:33

标签: php mysql laravel-5.2

我在Laravel 5.2中创建了一个简单的插入语句,就像这些。

User::create([
        'email' => $request->input('email'),
        'username' => $request->input('username'),
        'password' => bcrypt($request->input('password')),
    ]);

但我希望我的数据库更安全,所以我更喜欢使用Prepared Statement。我要求正确编写语法?如何在声明中正确哈希password

User::insert('insert into users (email, username, password) values (?,?,?)');

1 个答案:

答案 0 :(得分:1)

Eloquent在幕后为你做了这件事,在完成所有它的花哨之后,最后,Eloquent调用PDO::prepare()PDO::bindValue(),最后调用PDO::execute();

浏览Illuminate\Database\Connection的代码,了解它的要点。

您唯一需要注意的是不要将DB::raw()与直接提供的用户输入一起使用,例如:

// This is bad
DB::raw('SELECT * FROM table_name WHERE col = '.$request->query('col'));

// This is good
DB::raw('SELECT * FROM table_name WHERE col = ?', [$request->query('col')]);
//or
DB::raw('SELECT * FROM table_name WHERE col = :col', ['col' => $request->query('col')]);