SQL Query似乎正在执行两次

时间:2011-09-27 12:19:25

标签: php mysql sql insert

  

可能重复:
  Insert query on page load, inserts twice?

我希望有人可以帮助解决一个让我陷入困境的问题。我已经搜索过,但没有发现任何直接回答这个问题。

我在网站上遇到问题,其中SQL INSERT查询似乎运行了两次,但仅在某些情况下运行。

这是一个简单的购物网站。在我的产品页面上有一个“添加到购物车”按钮。按下此按钮,用户将进入购物车页面,并传递各种变量。当页面加载并且结果显示在购物车中时,将运行INSERT查询。

这一切在大多数情况下都能很好地工作,但在某些情况下,产品会被添加到数据库中两次。

问题与任何特定产品无关。由于大部分时间都可以正常工作,所以我非常有信心代码可以。我唯一可以说的是,我还没有看到Firefox以外的问题。有些人建议通过工具栏关闭“禁用缓存”,但我仍然遇到问题。

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

重新加载购物车页面后会发生什么? POST操作是否再次发生 - 可能是因为如果页面加载时出现挂起(这可能发生在Firefox上 - 特别是在Mac上 - 与其缓存系统有关),用户可能正在重新加载并因此重新发送页面数据并再次在INSERT查询中运行。

如果是这种情况......

...最好的想法可能是添加一个处理数据库的步骤,该数据库不输出任何内容(没有输出意味着没有缓存)。因此,您的“添加到购物篮”表单将数据发布到执行操作的数据库处理脚本,然后执行简单的标题(“location:...”)以将用户传递到“显示购物车”页面。

这样,执行数据库操作的脚本不会显示任何内容,也不会被缓存 - 用户可以根据自己的喜好随时点击“显示购物车”页面上的重新加载,然后只需重新加载现有购物车。

答案 1 :(得分:0)

首先,虽然听起来不是很有用,但问题在于您的代码,而不是Firefox,PHP或MySQL。我已经完成了你正在经历的事情,并确定它一定是一个bug,但现在已经解决了这个明显的问题。

为了帮助您缩小发生错误的位置,在代码中记录各个点是值得的,这样您就可以看到它是如何流过的。它也可以帮助记录SQL查询,因此您可以看到它们是否被快速连续调用,或者它是否是某种循环,其中在第二次调用之前发生了其他事情。

由于插件是在PHP中完成的,所以这都是在服务器端执行的,因此它特定于浏览器的可能性非常小。

在这个网站上有很多帮助,但为了给你提供更多具体的建议,你需要发布代码,以及有关应用程序流程的更多细节。

祝你好运!

相关问题