无法运行查询:Connection.php第673行中的异常:SQLSTATE [42000]:语法错误或访问冲突:1064

时间:2016-05-08 11:23:58

标签: php mysql sql laravel

我正在构建一个laravel应用程序,其中有一个控制器,我们必须预订教室,如果时间已经预订,或者在数据库中,我们无法在该时间间隔内预订教室。我使用了以下控制器:

public function postAllocateRoom(Request $request)
    {

            $classRoom = new ClassRoom();  

            $classRoom->department_id=$request->Input(['department_id']);     
            $classRoom->room_id=$request->Input(['room_id']); 
            $classRoom->course_id=$request->Input(['course_id']); 
            $classRoom->day_id=$request->Input(['day_id']); 
            $classRoom->start=$request->Input(['start']); 
            $classRoom->end=$request->Input(['end']);  
            $startTime = Carbon::parse($request->input('start'));
            $endTime = Carbon::parse($request->input('end'));
            $classRoom=DB::select('SELECT allocate_rooms.id 
            FROM allocate_rooms
            WHERE '.$startTime.' BETWEEN allocate_rooms.start AND allocate_rooms.end')->count(); 

            $messages ="Class Room Already Taken";
            if ($classRoom>0) {
             return redirect('allocateRoomPage');
                    }
            else { 
                 $classRoom->save();            
            return redirect('allocateRoomPage');  
            }                   
    }

但是我在保存数据库时遇到错误:

  

Connection.php第673行中的QueryException:SQLSTATE [42000]:语法   错误或访问冲突:1064您的SQL语法有错误;   查看与您的MariaDB服务器版本对应的手册   正确的语法在BETWEEN allocate_rooms.start附近使用17:00:00   AND allocate_rooms.end'在第3行(SQL:SELECT allocate_rooms.id FROM   allocate_rooms WHERE 2016-05-08 17:00:00 BETWEEN allocate_rooms.start   AND allocate_rooms.end)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

日期也需要引用:

$classRoom=DB::select('SELECT allocate_rooms.id 
FROM allocate_rooms
WHERE "' . $startTime . '" BETWEEN allocate_rooms.start AND allocate_rooms.end')->count(); 

我建议在laravel中搜索一种准备MySQL查询的方法,而不是手工编写。

浏览此博客文章,内容相同:http://fideloper.com/laravel-raw-queries