Laravel SQL查询保持给SQLSTATE [42000]:语法错误或访问冲突:1064

时间:2017-02-25 15:31:36

标签: php sql database laravel eloquent

我在laravel的控制器中有这个SQL查询

$distinct_course = DB::table('student')
    ->select(DB::raw('count(*) as grad_count, `student_course`, MONTH(`student_date_ended`)'))
    ->where('student_course', '=', 'Basic Computer')
    ->whereYear('student_date_ended', '=', '2015')
    ->groupby(DB::raw('MONTH(`student_date_ended`'))
    ->get(); 

这是基于我在将其转换为Laravel之前首先工作的SQL查询

select count(*) as grad_count, `student_course`, MONTH(`student_date_ended`) from `student` where `student_course` = "Basic Computer" and year(`student_date_ended`) = 2015 group by MONTH(`student_date_ended`)

但由于某种原因,我总是得到这个错误。

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MariaDB服务器版本对应的手册,以获得在''附近使用的正确语法。在第1行(SQL:选择计数(*)为grad_count,student_course,MONTH(student_date_ended)来自student,其中student_course =基本计算机和年份({{1} })= 2015年按月组(student_date_ended

我在这里做错了什么,我不知道?

2 个答案:

答案 0 :(得分:1)

作为替代方案,在我的所有项目中,我使用以下数据库交互方式:

$Query = 'select count(*) as grad_count, `student_course`, 
  MONTH(`student_date_ended`) 
  from `student` 
  where `student_course` = ? 
  and year(`student_date_ended`) = ? 
  group by MONTH(`student_date_ended`)';

$GradStudents = DB::select($Query, [ $StudenCourse, $StudentDateEnded]);

通过这种方式,我可以从已确认的MySQL语句转到Laravel,而不必担心转换后调用不起作用。

注意:我不是将db调用保留在控制器中,而是将它们放到模型文件夹中。这样您就可以维护MVC设计模式。

答案 1 :(得分:0)

在Paul的帮助下,我成功地使用了这段代码。

$Query = 'select count(*) as grad_count, `student_course`, 
              MONTH(`student_date_ended`) as Month 
              from `student` 
              where `student_course` = ? 
              and year(`student_date_ended`) = ? 
              group by MONTH(`student_date_ended`), student_course';

  $StudentCourse = 'Basic Computer';
  $StudentDateEnded = 2015; 

  $distinct_course = DB::select($Query, [ $StudentCourse, $StudentDateEnded]);

似乎问题的一部分是我还需要在中添加“student_course”列,所以我尝试将其添加到我原来的Laravel代码中并设法让它工作用这种方式。

 $distinct_course = DB::table('student')
    ->where('student_course', '=', 'Basic Computer')
    ->whereYear('student_date_ended', '=', '2015')
     ->select(DB::raw('count(*) as grad_count, `student_course`, MONTH(`student_date_ended`) as Month'))
    ->groupby(DB::raw('MONTH(`student_date_ended`), student_course'))
    ->get();