【发布时间】:2020-08-20 23:54:17
【问题描述】:
我正在使用 laravel 7.7.1 并在查询中传递一个变量 iaw 文档,如下所示:
public function show($graad=3)
{
$sums=Sum::where(function ($query) use($graad) {
$query->where('graad',$graad);
})->inRandomOrder()->limit(1)->toSql();
结果总是:
"select * from `sums` where (`graad` = ?) order by RAND() limit 1"
所以变量没有以正确的方式传递并转换为“?”。
更改 $graad='test' 或 $graad='3' 的值,甚至使用
进行类型提示 public function show(int $graad=3)
确实会导致
"select * from `sums` where (`graad` = ?) order by RAND() limit 1"
表中的列 graad 是一个 int(11)。 我做错了什么?
【问题讨论】:
-
这是一个防止sql注入的安全功能
-
你和 ORM 都没有做错什么。您看到的是
toSql()函数的预期结果。在选择框架之前,请阅读所有this。 -
这是返回查询实例。当您传递参数时,它将替换它们以代替
?并在->get()函数调用上执行。