【问题标题】:Failed to Run Query: Exception in Connection.php line 673: SQLSTATE[42000]: Syntax error or access violation: 1064无法运行查询:Connection.php 第 673 行中的异常:SQLSTATE[42000]:语法错误或访问冲突:1064
【发布时间】:2016-09-03 02:44:09
【问题描述】:

我正在构建一个 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 服务器版本相对应的手册 在 '17:00:00 BETWEEN allocate_rooms.start 附近使用的正确语法 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)

我该如何解决这个问题?

【问题讨论】:

    标签: php mysql sql laravel


    【解决方案1】:

    日期也需要注明:

    $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

    【讨论】:

    • 我已经使用了你的建议,但问题是它没有保存数据库中矛盾的值,而是将 00:00:00 保存在数据库中!
    • @RandeepSingh 这是一个逻辑问题。我不知道您的数据库是如何设计的,您如何尝试插入/更新值等。我建议创建一个新问题,作为此问题的后续,并清楚地描述问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2017-11-05
    • 2022-01-25
    • 2017-10-29
    相关资源
    最近更新 更多