Laravel:查询构建器

Posted

技术标签:

【中文标题】Laravel:查询构建器【英文标题】:Laravel: Query builder 【发布时间】:2021-09-25 06:33:28 【问题描述】:

可能是个愚蠢的问题,如何在 select 语句中正确声明 ID?

public function generatefinalconfirmation($id) 
        $booking = Booking::findOrFail($id);
        $flightin = DB::select('SELECT b.bookingname, f.origin FROM Bookings B JOIN Flights F ON B.Flightin = F.FlightId WHERE B.ID = id');

那个代码给了我所有的数据,而where b.id = $id给了我一个错误信息。

谢谢

编辑:感谢大家的回答,对于所有菜鸟的错误,我们深表歉意

【问题讨论】:

观看您的报价。你的意思是where b.id=' . $id?变量不会在单引号中展开(这是正确的术语吗???) 如果 TO 的意思是,查询对 SQL 注入开放 "...给我一条错误信息" 那会是什么错误信息? b.idB.ID不一样 【参考方案1】:

这样可以防止 SQL 注入并使代码更具可读性:

public function generatefinalconfirmation($id) 
        $booking = Booking::findOrFail($id);
        $flightin = DB::table('Bookings AS B')
                ->select([ 'b.bookingname', 'f.origin'])
                ->join('Flights AS F', 'B.Flightin', 'F.FlightId')
                ->where('B.ID', $id);

【讨论】:

可能需要as 关键字作为别名。我看到 QueryBuilder 对此很挑剔。

以上是关于Laravel:查询构建器的主要内容,如果未能解决你的问题,请参考以下文章

向 Laravel 查询构建器添加自定义函数

将原始 SQL 转换为 Laravel 查询构建器

使用 Laravel 查询构建器方法 whereIn() 和子查询

laravel 查询构建器计数关系

将原始 SQL 查询传递给 Laravel 上的查询构建器

在 laravel 查询构建器中使用多个 where 子句