$ _SERVER不返回查询字符串

时间:2011-09-28 17:01:44

标签: php query-string

我只是想将用户正在查看的当前页面存储在数据库中。当页面加载时,我将$_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']插入到我的数据库中,但只显示了页面(例如index.php?),没有查询字符串(我已经验证了URL中有查询字符串)

我尝试了$_SERVER['PHP_SELF']同样的结果。

编辑添加: 这是$ _SERVER的转储:

Array
(
    . . .
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => view=scores&yr=2010&wk=1
    [REQUEST_URI] => /index.php?view=scores&yr=2010&wk=1
    . . .
)

因此查询字符串存在于数组中,即使是REQUEST_URI的一部分。所以我的询问......

mysql_query("insert into clickstream
               (user_id, page)
             values
               (" . $_SESSION['user_id'] . ", '" . mysql_real_escape_string($_SERVER['REQUEST_URI']) . mysql_real_escape_string($_SERVER['QUERY_STRING']) . "');")
  or die('mysql error: ' . mysql_error());

...实际上应该插入两次查询字符串,而不是没有时间!

思想?

添加了一个想法:MySQL DB是否有可能从?以外的输入中删除所有内容?该字段是varchar。

更新W /部分解决方案:将SQL输入更改为 $_SERVER['QUERY_STRING'](不带REQUEST_URI)成功输入查询字符串。因此,它让我相信PHP或MySQL ?之后的输入字符串中删除所有内容。所以输入参数是正确的;结果被截断了。

有谁知道为什么会这样?

4 个答案:

答案 0 :(得分:2)

不同的服务器将不同的$_SERVER全局变量传递给页面。我假设您使用的是Apache而不是NGINX,您可能需要检查FASTCGI_PARAMS中是否定义了QUERY_STRING

解决方案是像@hakre那样做,只看到哪个$ _SERVER键有你想要的。

<?php
print '<pre>';
print_r($_SERVER);
print '</pre>';

答案 1 :(得分:1)

你能不能只使用$_SERVER['REQUEST_URI']?它将查询字符串作为输出的一部分......

答案 2 :(得分:1)

感谢您的反馈,特别是@nachito。问题已被隔离到MySQL,而不是PHP。 PHP的输出是正确的,但MySQL在插入数据库后?之后从URL中剥离了所有内容。

答案 3 :(得分:0)

您能否向我们展示点击流表的定义?

如果页面列只有10个字符长,那么我们就发现了问题:)

'的index.php?' (10个字符)

要查看表结构,您可以发出此MySQL命令:

SHOW CREATE TABLE clickstream;