1

无论用户是否登录,我都在尝试跟踪我网站上的综合浏览量,因此我在我的日志中捕获了 sessionId。我只想显示在某个时间点登录的会话 ID 的跟踪结果,因此我的流程如下:

$pagestats = $wpdb->get_results("SELECT * FROM wp_user_stats WHERE uid=".$_GET['viewstats']);
$sessionArray = array();

foreach($pagestats as $checkSession)
{
    if( !(in_array($checkSession->sessionId, $sessionArray)))
    {
        $sessionArray[] = $checkSession->sessionId;
        }
    }

接下来,我正在尝试收集有关此特定用户生成的任何会话 ID 的所有统计信息...

$sessions = join(',',$sessionArray);
$pagestats = $wpdb->get_results("SELECT * FROM wp_user_stats WHERE `sessionId` IN($sessions)") or die(mysql_error());

这是引发错误的部分。错误是:

Unknown column 'sjhntmqhltknks8pbhr750voe7' in 'where clause'

我不明白为什么它试图找到与会话 ID 匹配的列,而不是该列中的结果。

4

5 回答 5

2

会话 ID 可能没有被引用,因此查询看起来像WHERE sessionID IN(abc, def, ...).

解决此问题的一种方法是在第一个循环中更改一行:

$sessionArray[] = "'".$checkSession->sessionId."'";

或者,您可以使用引用的值创建第二个数组。

于 2012-08-20T23:41:55.353 回答
2

问题是会话 id 不是数字,需要用引号括起来。类似以下内容会为您的$sessions字符串添加正确的引号:

$sessions = "'" . implode("', '", $sessionArray) . "'";

您还应该确保$_GET['viewstats']在使用它们之前转义任何用户提供的输入(例如 ),以帮助避免 SQL 注入攻击。$checkSession->sessionId当您将其添加到$sessionArray数组中时,逃脱也不会受到伤害。

如果您使用的是框架(看起来您可能正在使用 WordPress),请阅读数据库组件的手册,因为它可能会提供一些功能来为您处理其中的一些问题。

于 2012-08-20T23:45:20.287 回答
1

我认为您需要在会话值周围加上引号

$sessions = "'".join("','",$sessionArray)."'";

现在它就像WHERE IN (a,b,c)而不是WHERE IN ('a','b','c').

于 2012-08-20T23:45:13.490 回答
0
$pagestats = $wpdb->get_results("SELECT * FROM wp_user_stats WHERE `sessionId`=$sessions") or die(mysql_error());
于 2012-08-20T23:38:15.010 回答
0

这不是对特定问题的回答,但第二个SELECT陈述不是不必要的吗?如果它全部存储在一个表中(除非有错字...),那么SELECT * FROM wp_user_stats WHERE uid=$_GET['view_stats']将检索该用户的所有会话。也许您需要为多个用户完成它?即使那样,你也可以简单地做一个GROUP BY子句。

也许我错过了一些东西——如果是这样,对不起。

于 2012-08-21T00:41:11.557 回答