此查询使用$hotel_id
和两个日期变量来从数据库中获取一些数据。但是我一直收到此错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax
这是另一个项目中使用的更大的查询,在该项目中运行完美。但是我的项目中有一些我无法解决的问题。
$from_Date
和$to_Date
变量没问题。
此MySQL语句有什么问题?
$splitDate = explode('/', $start);
$from_Date = jalali_to_gregorian($splitDate[0], $splitDate[1], $splitDate[2], 1);
$splitDate = explode('/', $end);
$to_Date = jalali_to_gregorian($splitDate[0], $splitDate[1], $splitDate[2], 1);
$query = DB::statement('SELECT DISTINCT t.type_id pmrtypeid ,(CASE WHEN COUNT(t.type_id)-qb.cntrttypid IS Null THEN COUNT(t.type_id) ELSE COUNT(t.type_id)-qb.cntrttypid END)cnttypeid FROM type t JOIN room r
on r.type_id=t.type_id
LEFT JOIN (SELECT DISTINCT rt.type_id rttypid,COUNT(rt.type_id)cntrttypid FROM reserve_type rt
JOIN reserve re
ON re.reserve_id=rt.reserve_id
JOIN type ty
ON ty.type_id=rt.type_id
WHERE ((? BETWEEN re.from_date AND re.to_date) or (? BETWEEN re.from_date AND re.to_date)) AND ty.hotel_id=?
GROUP BY rt.type_id)qb
ON qb.rttypid=t.type_id
JOIN reserve_span rsn
ON rsn.hotel_id=t.hotel_id
WHERE r.hotel_id=? AND ((? BETWEEN rsn.from_date AND rsn.to_date) and (? BETWEEN rsn.from_date AND rsn.to_date)) and rsn.is_enable=1
GROUP BY t.type_id)pmr
on pmr.pmrtypeid=tps.type_id
join type_feture tf
on tps.type_id=tf.type_id' , [$from_Date,$to_Date,$hotel_id,$hotel_id,$from_Date,$to_Date] );
}
答案 0 :(得分:1)
您为什么使用DB::statement()
而不是DB::select()
?
此外,DB::statement()
不使用绑定值数组参数。
https://laracasts.com/discuss/channels/laravel/l5-bindings-is-not-working-with-dbstatement
答案 1 :(得分:1)
问题出在我的其他代码中:
)pmr
on pmr.pmrtypeid=tps.type_id
join type_feture tf
on tps.type_id=tf.type_id
无用的括号造成了错误。我也按照@Erubiel的建议将DB :: statement()更改为DB :: select()。