【问题标题】:prepared statement with Eloquent ORM / laravel使用 Eloquent ORM / laravel 准备好的语句
【发布时间】:2015-01-23 18:14:33
【问题描述】:

我是 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 编写准备好的语句?

【问题讨论】:

  • 您所拥有的将自动在幕后使用准备好的语句。
  • 请注意 - 此查询与 Eloquent 无关。这是Query\Builders 插入方法,它甚至不涉及 Eloquent 功能。另一方面,Eloquent 依赖于自己的 Eloquent\Builder 类后面的 Query\Builder
  • @JarekTkaczyk 谢谢你的来信,你能给我指出一个更“雄辩”的方式吗?
  • @baao 那你有user_input 表的型号吗?如果是这样,那么只需使用Model::create(['fname' => ... ]) 方法。但是,请注意,您需要拥有这些字段 fillable 才能保存它们。如果你没有,那么绝对没有办法使用 Eloquent 来完成这项工作:)

标签: php mysql laravel laravel-4 eloquent


【解决方案1】:

Eloquent 在后台执行 PDO 样式的预处理语句,以防止诸如 sql 注入之类的事情发生。默认情况下,Eloquent 模型还可以防止质量分配。除非您特别注意应保护的数据库列或相反的列(应可填充的列),否则将引发异常。

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

如果你想深入挖掘,可以看看类

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

看看 laravel 如何在 Eloquent 中构造查询。

【讨论】:

  • 批量赋值与PDO无关。
猜你喜欢
  • 2014-10-07
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多