【问题标题】:Mysql request creating multiple records on insert issueMysql请求在插入问题上创建多条记录
【发布时间】: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 处理程序而不是 onClickonSubmit 就可以做到这一点。
  • 您将需要在服务器端进行一些日志记录,以确切地查看您收到的请求和插入的数据。这些数据不会在没有解释的情况下神奇地出现。就目前而言,可以按照您的描述插入的唯一方法是,如果请求通过?web=S,然后是?web=Se 等等。检查您的日志。如果需要,请添加更多调试代码。
  • @tadman Gosh 我终于发现 wtf 是这样的!每次我按 Enter 键时,这都是一个愚蠢的“Chrome 扩展”请求

标签: php mysql nginx


【解决方案1】:

原因是 chrome 扩展程序提出了额外的请求....我花了一整天的时间才知道这一点。

【讨论】:

  • 干得好。更快地捕获这些问题的一种方法是尝试其他浏览器(例如 Firefox)或使用 curl 等工具来缩小概率。
  • @tadman 同意你的观点,但我什至无法想象某些扩展程序可以提出额外的请求
  • 扩展可以做很多你意想不到的事情。这就是为什么您需要真正选择启用哪些。
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 2016-09-01
  • 2014-04-22
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多