【问题标题】:Laravel Delete Query BuilderLaravel 删除查询生成器
【发布时间】:2014-05-08 12:18:19
【问题描述】:

在 Laravel 4 Illuminate\Database\Query 中的 Builderdelete 函数接受 null 作为 id 参数。这个函数的行为意味着如果我有类似的东西:

DB::table('users')->where('id', $id)->delete();

如果$id 将作为null 传递,它将截断整个表。这意味着除了标准验证之外,我还必须使用! is_null($id) 验证来包装每个删除语句。这是安全漏洞还是被视为标准做法?

【问题讨论】:

  • 同样的语句也适用于 laravel 5.4 版

标签: php mysql laravel-4


【解决方案1】:

我认为您误解了该参数的用途。对于您展示的示例,它只是一个快捷方式。如果您有用户 ID,则无需编写 where 子句即可将其删除。

DB::table('users')->delete($id);

以上与此相同:

DB::table('users')->where('id', $id)->delete();

显然,在使用任何这些方法之前,您都需要进行检查,以确保提供了有效的 ID。我不会说这是安全漏洞,只是作为开发人员在开发应用程序时需要注意的事情。您不会在没有首先验证输入的情况下随意删除内容。

【讨论】:

  • @Jason,感谢您的出色解决方案,但如果主键的名称与 id 不同,如何使用 DB::table('users')->delete($id);在这种情况下?
  • @SachinVairagi 在你的模型中添加这一行:protected $primaryKey = 'my_column';
  • 在 my_column 中,添加作为主键的列名
猜你喜欢
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2019-01-29
相关资源
最近更新 更多