我目前正在开发一个网站,将展示一些产品。我最初从外部XML文件中获取这些产品并将它们存储在数据库中,然后我从数据库中获取它们以在网站上显示它们(从XML到数据库是一个自动化的cronjob过程)。
这一切都很好,但想要提供一些背景信息。
对于本网站,我使用以下rewriteRules
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1$cat2=$2&cat3=$3&xid=$4 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1&cat2=$2&xid=$3 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1&xid=$2 [L]
这在几乎所有情况下都有效,但有一种情况,一旦某个产品显示出xid更改值。我花了一段时间才发现这是因为RewriteRules。我可以确保你不是因为别的东西,因为当我“跳过”rewriteRules并以常规方式去那里时,它只是工作正常。
我想要这些,以便人们可以转到.com/Ladies/1
或.com/Ladies/pants/4
或.com/Ladies/Pants/Shorts/2
。然而现在出现了奇怪的部分。
当我创建像
这样的会话时$_SESSION["pid"] = $mysqli->real_escape_string($_GET["xid"]);
然后$_SESSION["pid"]
将更改为此新值。但是如果我创造了
$_SESSION["sql"] = "SELECT * FROM somthing WHERE id = " . $mysqli->real_escape_string($_GET["xid"]);
然后它会将其从"SELECT * FROM something WHERE id = 1"
更改为"SELECT * FROM something WHERE id = 0810890000116"
。
每当我使用$_GET["xid"]
时,无论它是否在字符串的中间,它都会改变它。
当我执行一个名为php脚本的AJAX时,甚至当我返回主页并echo $_SESSION["pid"]
时,都会发生这种情况。
这些数字是该产品的EAN编号!这个EAN号码甚至不在我自己的数据库中。我几乎肯定它,因为我检查和检查,它甚至没有在描述或其他什么。这就是为什么我知道这个产品有问题的原因。
有没有人对这类问题有所了解?
我对重写规则没有任何实际意义,但这个问题对我来说似乎很奇怪。它让我相信服务器内存上的实际位置被改变了,否则我看不到在字符串中间使用它时值的变化。我已经尝试过重命名它并没有解决它。