我在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 (?,?,?)');
答案 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')]);