Php 语法错误或访问冲突

Php 语法错误或访问冲突,php,mysql,sql,Php,Mysql,Sql,在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));

在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
"));
$log\u stats=DB::select(DB::raw(“
SET@startDate='$from';
将@endDate='$db_设置为';
设置@total_duration=(CAST(@endDate作为DATETIME)-CAST(@startDate作为DATETIME));
选择t1.status
,SUM(如果(t2.cron_ran_at为NULL或t2.cron_ran_at>@endDate,
强制转换(@endDate作为DATETIME),
t2.cron_run_at)-
如果(t1.cron)在<@startDate运行,
演员阵容(@startDate作为DATETIME),
t1.cron_run_at))/@总持续时间作为持续时间
从监视器日志t1
左连接监视器_在t1.id=(t2.id-1)上记录t2
其中(t2.cron_在>@startDate或t2.cron_在为空)和t1.cron_在<@endDate
按t1.1状态分组
"));
引发异常

SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“SET@endDate='2015-07-22 00:00:00'附近使用的正确语法;设置@total_duration=(第2行的CAST(@endDate')(SQL:SET@startDate='2015-07-14 00:00:00';设置@endDate='2015-07-22 00:00:00';设置@total_duration=(CAST(@endDate as DATETIME)-CAST(@startDate as DATETIME));选择t1.status,SUM(如果(t2.cron_run_at为NULL或t2.cron_run_at>@endDate,CAST(@enddatetime为DATETIME),t2.cron_run_at)-如果(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),其中(t2.cron_ran_at>@startDate或t2.cron_ran_at为NULL)和t1.cron_ran_at<@endDate组BY t1.status)`


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

将SQL变量设置为PHP变量。