我使用的是laravel 7.7.1,在一个查询中,我传递了一个变量iaw的docs,像这样。
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).我做错了什么?
我认为你缺少了 get()
试。
$sums = Sum::where('graad', $graad)->inRandomOrder()->limit(1)->get();
或者
$sums = JOBS::where(function($query) use ($graad){
$query->where('graad', $graad);
})->inRandomOrder()->limit(1)->get();
public function show($graad)
{
// Rest of your code
然后确保你的路由接收到url中的值并发送(假设你是这样调用方法的).
Route::get('your-route-name/{graad}', 'YourController@show');
Laravel在引擎盖下使用了预备语句. 这是为了避免SQL注入. 语句中的 ?
是数据的占位符,这些数据将在稍后被绑定所替代。
您可以使用 $query->getBindings();
来获取将在SQL语句中绑定的数据。
请尝试以下方法。
public function show($graad=3)
{
$sums=Sum::where(function ($query) use($graad) {
$query->where('graad',$graad);
})->inRandomOrder()->limit(1);
vsprintf(str_replace(['?'], ['\'%s\''], $sums->toSql()), $sums->getBindings());