使用Eloquent ORM / Laravel准备语句

3

我是laravel的新手,使用以下代码作为输入查询:

DB::table('user_input')->insert(array(
                array('fname' => Input::get('Name'),'lname' => 'no','email' => Input::get('E-Mail'),'date_from' => $from_date,'date_to' => $to_date,'phone' => Input::get('Phone'),'message' => Input::get('Message'),'ip_address' => Request::getClientIp(), 'newsletter' => Input::get('Sign-up'))

            ));

在标准的PHP中,我不会像那样做,因为查询似乎没有经过准备,而我直接将用户输入放入上述查询。

Eloquent ORM中是否有自动准备功能,我还没有意识到,或者我该如何使用Eloquent编写准备好的语句?


1
你所拥有的将会在幕后自动使用一个预处理语句。 - Joseph Silber
仅作说明 - 此查询与 Eloquent 无关。它是 Query\Builder 的插入方法,甚至不涉及 Eloquent 功能。另一方面,Eloquent 依赖于其自己的 Eloquent\Builder 类后面的 Query\Builder - Jarek Tkaczyk
@JarekTkaczyk 谢谢你的留言,你能指引我去一个更加“优雅”的方向吗? - baao
@baao 嗯,你有user_input表的模型吗?如果有,那么只需使用Model::create(['fname' => ... ])方法即可。但是,请注意您需要将这些字段设置为“fillable”才能保存它们。如果没有,那么肯定无法使用Eloquent完成此任务 :) - Jarek Tkaczyk
1个回答

3
Eloquent会在后台使用PDO风格的预处理语句来防止SQL注入等问题。Eloquent模型默认还会防止批量赋值攻击。除非你明确指定数据库应该保护哪些列或反向指定(应该填充哪些列),否则将抛出异常。

http://laravel.com/docs/4.2/eloquent#mass-assignment

如果您想深入了解,请查看类

/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php` 

了解Laravel如何在Eloquent中构建查询。


1
批量赋值与PDO无关。 - Jarek Tkaczyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接