繁体   English   中英

语法错误或访问冲突

[英]Syntax error or access violation

在phpmyadmin中执行时,以下SQL按预期工作,但是当我尝试在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'在第2行(SQL:SET @ startDate ='2015-07-14 00:00:00'; SET @ endDate ='2015-07-22 00:00:00'; SET @total_duration =(CAST(@endDate为DATETIME)-CAST(@startDate为DATETIME));选择t1.status,SUM(IF(t2.cron_ran_at IS NULL或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为NULL)和t1.cron_ran_at <@endDate GROUP BY t1.status)`

您不能在PHP的一个查询中运行多个mysql语句。 您应该将此设置为存储过程或函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM