我只是试图存储用户在数据库中查看的当前页面.页面加载时,我插入$_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 / PARTIAL SOLUTION:将sql输入更改为$_SERVER [‘QUERY_STRING’](不带REQUEST_URI)成功输入查询字符串.因此,它让我相信PHP或MysqL正在从?之后的输入字符串中剥离所有内容.所以输入参数是正确的;结果刚被截断.
有谁知道为什么会这样?
解决方法:
不同的服务器将不同的$_SERVER全局变量传递给页面.我假设您使用的是Apache而不是Nginx,您可能需要检查是否在FASTCGI_ParaMS中定义了QUERY_STRING.
解决方案是像@hakre那样做,只看到哪个$_SERVER键有你想要的.
<?PHP
print '<pre>';
print_r($_SERVER);
print '</pre>';