Mysql 查询在phpmyadmin中工作完美,但在使用php获取时仅返回true/1
我有一个查询,它完全符合我在phpmyadmin中的要求,它返回我的站点的访问次数。例:访问人数:2204Mysql 查询在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
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;”中删除“;)现在它工作了!=)