【问题标题】:Why is my MySQL INSERT query inserting 3 identical rows?为什么我的 MySQL INSERT 查询插入 3 个相同的行?
【发布时间】:2009-04-26 21:08:04
【问题描述】:

我正在尝试使用 PHP 和 MySQL 跟踪用户在我的网站上搜索的内容(通过首页上的简单搜索表单)。

在我所有的查询结束时,我都在使用这个查询:

INSERT INTO `DiggerActivity_Searches` (
`SearchTerms`,
`SearchType`,
`NumResults`,
`Location`,
`Date`,
`Time`
) VALUES (
'SearchKeywords',
'SearchTypes',
'NumberOfResults',
'User'sLocation',
'CurDate',
'CurTime'
)

现在,只要有一个新的搜索关键字,它就会插入 3 个相同的行。但是,如果我刷新页面,它应该只插入 1 行。

这些值像这样作为 GET 传递(我已经重写了 URL 的东西):

http://www.mysite.com/Search-Category-Search_these_words

【问题讨论】:

  • 你的脚本怎么样?
  • 你也可以粘贴表格定义吗?可能是您的键有问题或缺少主键。
  • 题外话:为什么有一个日期栏和一个时间栏?使用 DateTime 类型和一列不是更好吗?

标签: php mysql insert


【解决方案1】:

您可能需要首先检查您的脚本是否执行了 3 次查询或脚本被调用了 3 次(例如通过某些浏览器插件)。
如果你没有安装调试器,你可以使用类似的东西

功能跟踪日志(){ 静态 $magic = null; if (is_null($magic)) { $magic = uniqid(); } $s = $魔法。 ' '。微时间(真)。 ":\r\n"; foreach( debug_backtrace() as $d) { $s .=''。 $d['file'].'@'.$d['line']."\r\n"; } file_put_contents('trace_log.txt', $s, FILE_APPEND); } ... 跟踪日志(); mysql_query(....) // 或者 stmt->execute() 或者任何你用来执行查询的东西。

如果 trace_log.txt 中每个日志条目的第一个值(“魔术”id)发生变化,您的脚本会被多次调用。如果对 trace_log() 的所有三个调用都相同,则您的脚本将执行该查询 3 次。

【讨论】:

    【解决方案2】:

    您的表缺少主键。我建议使用 PK 之类的搜索 ID 或类似的东西

    Unique key - Wikipedia了解更多信息

    【讨论】:

      【解决方案3】:

      只要知道你不是一个人在处理这个奇怪的错误。

      过去几天我的网站上也出现了同样的问题。我最近添加的唯一内容是第三方横幅广告。

      解决方案:我注释掉了横幅广告脚本(提示:来自以 G 开头的搜索引擎),一切都恢复正常了。

      【讨论】:

        【解决方案4】:

        我只是想发表评论说需要更多的声誉,所以......

        不管怎样,类似的事情发生在我身上。原来我在标题上方回显调试信息,导致浏览器自动重新加载。最简单的检查方法就是使用

        <script type="text/javascript">alert("loading");</alert>
        

        在标题中,看看你看到了多少次。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-10
          • 2013-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-02
          • 2014-12-21
          相关资源
          最近更新 更多