SQL Query 似乎执行了两次 [重复]
Posted
技术标签:
【中文标题】SQL Query 似乎执行了两次 [重复]【英文标题】:SQL Query seems to be executing twice [duplicate] 【发布时间】:2011-09-27 12:19:24 【问题描述】:可能重复:Insert query on page load, inserts twice?
我希望有人可以帮助解决让我陷入困境的问题。我已经搜索过,但没有直接回答这个问题。
我在一个网站上遇到问题,其中 SQL INSERT 查询似乎运行了两次,但仅在某些情况下运行。
这是一个简单的购物网站。在我的产品页面上有一个“添加到购物车”按钮。按下此按钮后,用户将被带到购物车页面,并传递各种变量。当页面加载并将结果显示在购物车中时,将运行 INSERT 查询。
这在大多数情况下都可以正常工作,但在某些情况下,产品会被添加到数据库中两次。
此问题与任何特定产品无关。由于它在大多数情况下都可以正常工作,因此我非常有信心代码可以正常工作。我唯一能说的是,我还没有看到 Firefox 之外的问题。有人建议通过工具栏打开“禁用缓存”,我有,但仍然遇到问题。
非常感谢任何建议。
【问题讨论】:
所以任何产品都没有问题,代码也没有问题,但它不能正常工作。你错过了一些东西。如果您需要帮助,请添加更多详细信息和一些代码 sn-ps。 我认为问题在于页面重新加载,如果以及何时重新加载您的查询会被执行。 你有任何代码来捕捉双重提交吗? 【参考方案1】:当您重新加载购物车页面时会发生什么? POST 操作是否再次发生 - 如果在页面加载时出现挂起(这可能发生在 Firefox 上 - 特别是在 Mac 上 - 与其缓存系统有关),用户可能会点击重新加载并因此重新发送页面数据并再次在 INSERT 查询中运行。
如果是这样的话...
... 最好的想法可能是添加一个处理不输出任何内容的数据库的步骤(没有输出意味着没有缓存)。因此,您的“添加到购物车”表单将数据发布到执行操作的数据库处理脚本,然后执行简单的标题(“位置:...”)将用户传递到“显示购物车”页面。
这样,执行数据库操作的脚本不会显示任何内容,并且永远不会被缓存 - 用户可以根据需要在“显示购物车”页面上点击重新加载,它只会重新加载他们现有的购物车。
【讨论】:
【参考方案2】:首先,虽然这听起来不是很有帮助,但问题在于您的代码,而不是 Firefox、php 或 mysql。我已经完全经历了你正在经历的事情,并且确定它一定是一个错误,但是这个明显的事情现在已经被修复了。
为了帮助您缩小错误发生的范围,值得在您的代码中记录各个点,这样您就可以看到它是如何通过的。它也可能有助于记录 SQL 查询,因此您可以查看它们是否被快速连续调用,或者它是否是某种循环,在第二次调用之前发生了其他事情。
由于插入是在 PHP 中完成的,这一切都是在服务器端进行的,所以它是特定于浏览器的可能性很小。
这个网站上有很多帮助,但为了给您提供更具体的建议,您需要发布代码,以及有关应用程序流程的更多细节。
祝你好运!
【讨论】:
以上是关于SQL Query 似乎执行了两次 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
maven项目中junit测试同一方法, 运行一次却重复执行了两次?