Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\u服务器未返回查询字符串_Php_Query String - Fatal编程技术网

Php $\u服务器未返回查询字符串

Php $\u服务器未返回查询字符串,php,query-string,Php,Query String,我只是尝试将用户正在查看的当前页面存储在数据库中。当页面加载时,我插入$\u服务器['REQUEST\u URI']$_服务器['QUERY_STRING']进入我的数据库,但只有页面(例如index.php?)显示,没有查询字符串(我已验证URL中有查询字符串) 我尝试了$\u服务器['PHP\u SELF'],结果相同 编辑以添加: 下面是$\u服务器的转储: Array ( . . . [REQUEST_METHOD] => GET [QUERY_STRING

我只是尝试将用户正在查看的当前页面存储在数据库中。当页面加载时,我插入
$\u服务器['REQUEST\u URI']$_服务器['QUERY_STRING']
进入我的数据库,但只有页面(例如
index.php?
)显示,没有查询字符串(我已验证URL中有查询字符串)

我尝试了
$\u服务器['PHP\u SELF']
,结果相同

编辑以添加: 下面是$\u服务器的转储:

Array
(
    . . .
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => view=scores&yr=2010&wk=1
    [REQUEST_URI] => /index.php?view=scores&yr=2010&wk=1
    . . .
)
因此,查询字符串存在于数组中,甚至作为请求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数据库是否可能除去
之外的所有输入?字段是varchar

使用部分解决方案更新:将SQL输入更改为仅
$\u服务器['QUERY\u STRING']
(无请求\u URI)成功输入查询字符串。因此,它让我相信PHP或MySQL在
之后从输入字符串中剥离了所有内容。因此,输入参数是正确的;结果被截断了


有人知道为什么会这样吗?

不同的服务器将不同的
$\u服务器
全局文件传递到页面。我假设您使用的是Apache而不是NGINX,您可能需要检查FASTCGI_参数中是否定义了
QUERY_STRING

解决方案是按照@hakre所说的做,只需看看哪个$\u服务器密钥具有您想要的内容

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

您不能直接使用
$\u服务器['REQUEST\u URI']
?它将查询字符串作为输出的一部分…

您能否向我们展示表的定义clickstream

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

“index.php?”(10个字符)

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


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

您测试过什么是
var\u转储($\u服务器)
必须提供?有趣的是,您是否检查了.htaccess的存在?另外请注意,POST请求通常不附带
查询字符串。(否则这是一个不太可能出现的错误,因为CGI规范规定了GET请求的参数。)@mario这是一个GET请求,我验证请求是否通过,因为没有它,正确的页面将无法加载。:)您使用的是框架还是任何其他重定向?请参阅原始问题的补充。您应该使用
mysql\u查询(“插入到clickstream(user\u id,page)值(((int)$\u SESSION['user\u id']。,'”)。mysql\u real\u escape\u string($\u SERVER['REQUEST\u URI'])。“;”)或die($mysql错误:'.mysql\u error())
为了避免SQL注入您是对的,由于值本身的故障排除,我忽略了这一步。您的编辑说只添加
$\u服务器['QUERY\u STRING']
有效,只添加
$\u服务器['REQUEST\u URI']
也有效吗?不。数据库中的结果在
之后会被删除(例如:。“index.php?”而不是“index.php?query=string&bla=yada”)。请参阅对原始问题的补充。@praguian,我刚刚检查过,您需要在应用程序发生错误之前停止正在执行的任何操作。我更新了代码以转义SQL查询的输入值,以避免SQL注入。这已经在我的代码的其他地方完成。不过,感谢您的提醒。
页面
字段长度为200个字符,以避免此问题。:)
SHOW CREATE TABLE clickstream;