Mysql 查询在phpmyadmin中工作完美,但在使用php获取时仅返回true/1

Mysql 查询在phpmyadmin中工作完美,但在使用php获取时仅返回true/1,mysql,Mysql,我有一个查询,它完全符合我在phpmyadmin中的要求,它返回我的站点的访问次数。例:访问人数:2204 set @last_uid = 0; set @last_tm = '00:00'; set @last_vid = 0; SELECT MAX( CASE WHEN @last_uid = visitorid AND cast( @last_tm as datetime) >= subtime( timestamp, '01:00' ) THEN

我有一个查询,它完全符合我在phpmyadmin中的要求,它返回我的站点的访问次数。例:访问人数:2204

set @last_uid = 0;
set @last_tm = '00:00';
set @last_vid = 0;

SELECT MAX(
     CASE WHEN @last_uid = visitorid AND cast( @last_tm as datetime) >= subtime( timestamp, '01:00' )
     THEN 
          if( (@last_tm := timestamp ), @last_vid, @last_vid)
     ELSE 
          if( (@last_uid := visitorid) + (@last_vid := @last_vid+1) +(@last_tm := timestamp ),@last_vid, @last_vid )
     END 
) as visitorCount

FROM visits v
ORDER BY timestamp DESC, visitorid
当我试图从PHP执行这个查询时,但是它不起作用,我已经用一个普通的PHP mysql连接和cakephp$this->Model->query()进行了测试;如果没有任何成功,我从查询中得到的只是“1”或true。怎么了

$query = "set @last_uid = 0;
                    set @last_tm = '00:00';
                    set @last_vid = 0;

                    SELECT MAX(
                         CASE WHEN @last_uid = visitorid AND cast( @last_tm as datetime) >= subtime( timestamp, '01:00' )
                         THEN 
                              if( (@last_tm := timestamp ), @last_vid, @last_vid)
                         ELSE 
                              if( (@last_uid := visitorid) + (@last_vid := @last_vid+1) +(@last_tm := timestamp ),@last_vid, @last_vid )
                         END 
                    )

                    FROM visits v
                    ORDER BY timestamp DESC, visitorid";

        $con = mysql_connect("host", "user", "pass");
        if (!$con) {
            die(mysql_error());
        }
        mysql_select_db("dbname", $con);
        $result = mysql_query($query);
        print_r(mysql_fetch_row($result));
给我错误信息:

mysql_fetch_row() expects parameter 1 to be resource, boolean given

我不确定这是否是因为您正在执行多条语句,但请尝试将其合并为一条语句

SELECT MAX(CASE WHEN @last_uid = visitorid AND cast( @last_tm as datetime) >= subtime( timestamp, '01:00' )
                THEN if((@last_tm := timestamp), @last_vid, @last_vid)
                ELSE if((@last_uid := visitorid) + (@last_vid := @last_vid+1) + (@last_tm := timestamp), @last_vid, @last_vid )
            END)
FROM    visits v,
        (SELECT @last_uid := 0, @last_tm := '00:00', @last_vid := 0;) x
ORDER   BY timestamp DESC, visitorid

我不确定这是否是因为您正在执行多条语句,但请尝试将其合并为一条语句

SELECT MAX(CASE WHEN @last_uid = visitorid AND cast( @last_tm as datetime) >= subtime( timestamp, '01:00' )
                THEN if((@last_tm := timestamp), @last_vid, @last_vid)
                ELSE if((@last_uid := visitorid) + (@last_vid := @last_vid+1) + (@last_tm := timestamp), @last_vid, @last_vid )
            END)
FROM    visits v,
        (SELECT @last_uid := 0, @last_tm := '00:00', @last_vid := 0;) x
ORDER   BY timestamp DESC, visitorid

只需谷歌搜索错误信息。您的查询失败并返回
false
它在phpmyadmin中没有失败正如我所说,我在我的php代码中执行了多个其他查询,没有任何问题,因此这也不是问题所在。因此,您确定此查询没有失败,因为代码中的其他查询没有失败?使用
mysql\u error()
查找查询失败的错误消息。(您似乎已经在下面做了吗?)啊,当然-您不能通过
mysql\u query()
传递多个命令。这就是下面的回答者试图解决的问题。不知道如何修复它,只需通过谷歌搜索错误消息。您的查询失败并返回
false
它在phpmyadmin中没有失败正如我所说,我在我的php代码中执行了多个其他查询,没有任何问题,因此这也不是问题所在。因此,您确定此查询没有失败,因为代码中的其他查询没有失败?使用
mysql\u error()
查找查询失败的错误消息。(您似乎已经在下面做了吗?)啊,当然-您不能通过
mysql\u query()
传递多个命令。这就是下面的回答者试图解决的问题。不知道如何修复它,但非常感谢您的评论!您的查询给我以下错误消息:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第6I行“”附近要使用的正确语法,从@last_tm:=“00:00”,“@last_vid:=0;”中删除“;)现在它工作了!=)非常感谢你的评论!您的查询给我以下错误消息:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第6I行“”附近要使用的正确语法,从@last_tm:=“00:00”,“@last_vid:=0;”中删除“;)现在它工作了!=)