下面的SQL在phpmyadmin中执行时会以intented方式工作,但是当我尝试在我的PHP脚本中执行时,它会引发异常。语法错误或访问冲突
$log_stats = DB::select(DB::raw("
SET @startDate = '$from';
SET @endDate = '$db_to';
SET @total_duration = (CAST(@endDate as DATETIME) - CAST(@startDate as DATETIME));
SELECT t1.status
,SUM(IF(t2.cron_ran_at IS NULL OR t2.cron_ran_at > @endDate,
CAST(@endDate AS DATETIME),
t2.cron_ran_at) -
IF(t1.cron_ran_at < @startDate,
CAST(@startDate AS DATETIME),
t1.cron_ran_at))/@total_duration as duration
FROM monitor_logs t1
LEFT JOIN monitor_logs t2 ON t1.id = (t2.id - 1)
WHERE (t2.cron_ran_at > @startDate OR t2.cron_ran_at IS NULL) AND t1.cron_ran_at < @endDate
GROUP BY t1.status
"));
抛出异常......
SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在'SET @endDate ='2015-07-22 00:00:00'附近使用正确的语法; SET @total_duration =(CAST(@endDate'at line 2(SQL:SET @startDate ='2015-07-14 00:00:00'; SET @endDate ='2015-07-22 00:00:00'; SET @total_duration =(CAST(@endDate as DATETIME) - CAST(@startDate as DATETIME)); SELECT t1.status,SUM(IF(t2.cron_ran_at IS NULL or t2.cron_ran_at> @endDate,CAST(@endDate AS DATETIME ),t2.cron_ran_at) - IF(t1.cron_ran_at < @startDate,CAST(@startDate AS DATETIME),t1.cron_ran_at))/ @total_duration作为持续时间FROM monitor_logs t1 LEFT JOIN monitor_logs t2 ON t1.id =(t2.id - 1),其中(t2.cron_ran_at> @startDate或t2.cron_ran_at IS NULL)AND t1.cron_ran_at < @EndDate GROUP BY t1.status)`
使SQL变量成为PHP变量。 – chris85