我在查询中包含了所有命名参数,还处理了PDO文档中提到的命名参数规则(即不支持命名参数的可重用性)。它仍然给我错误,我无法找到错误。
some.Frob
答案 0 :(得分:1)
您似乎错误地使用了您的命名参数。查看PDO::prepare文档,您会注意到参数名称周围的'
NOT 。请尝试此查询:
$leaves = DB::select(
"SELECT *
FROM leaves
WHERE emp_id=:emp_id AND status != 'Rejected'
AND (
(STR_TO_DATE(from_date, '%Y-%m-%d')
BETWEEN :from_date1 AND :to_date1)
OR (STR_TO_DATE(to_date, '%Y-%m-%d')
BETWEEN :from_date2 AND :to_date2)
)
OR (
(STR_TO_DATE(from_date, '%Y-%m-%d') <= :from_date3)
AND (STR_TO_DATE(to_date, '%Y-%m-%d') >= :to_date3)
)",
[
'emp_id'=> (int)$request->emp_id, 'from_date1'=>$request->from_date,
'to_date1'=>$request->to_date, 'from_date2'=>$request->from_date,
'to_date2'=>$request->to_date, 'from_date3'=>$request->from_date,
'to_date3'=>$request->to_date
]);
基本上,包括参数名称周围的'
使得驱动程序认为您在查询中使用了实际的varchar值。但是,在您的情况下,您正在尝试调用替换。