【发布时间】:2019-12-11 08:18:50
【问题描述】:
将尝试用 2 个词来解释我的问题。我有这样的地址。
https://example.com/update/?web=SecondString
并且有这样的代码
if ($_GET['web']) {
echo $_GET['web']; // will show SecondString
$db = new \PDO('*********');
$dbQuery = $db->prepare('INSERT INTO traf(website, count) VALUES(:web, 1)');
$dbQuery->bindParam(':web', $_GET['web']);
$dbQuery->execute();
exit;
}
数据库向我展示了这一点
万一
$db->prepare('INSERT INTO traf(website, count) VALUES("MYSTRING", 1)');
一切正常!
有人可以向我解释发生了什么以及如何解决它吗?
【问题讨论】:
-
您确定没有某种表单可以在每次更改输入字段时提交吗?使用“网络”检查器查看您的浏览器客户端正在做什么,因为我怀疑它发送的请求比您意识到的要多。
-
@tadman 这只是一个没有任何表单等的简单 url。只需导航就可以了……这可能是 nginx 或某些设置的问题,但我不确定
-
查看您的网络流量。在你知道这不是问题之前,我怀疑它是。我以前用过热的自动提交 JavaScript sn-p 见过这种情况。在 PHP 中意外执行此操作的可能性极小,因为您必须编写一个循环并执行大量
substr调用,就好像要严重破坏这种情况需要付出很大的努力。但是,使用 JavaScript 时,将其放入onChange处理程序而不是onClick或onSubmit就可以做到这一点。 -
您将需要在服务器端进行一些日志记录,以确切地查看您收到的请求和插入的数据。这些数据不会在没有解释的情况下神奇地出现。就目前而言,可以按照您的描述插入的唯一方法是,如果请求通过
?web=S,然后是?web=Se等等。检查您的日志。如果需要,请添加更多调试代码。 -
@tadman Gosh 我终于发现 wtf 是这样的!每次我按 Enter 键时,这都是一个愚蠢的“Chrome 扩展”请求