0

我可能忽略了一些简单的事情,但几周来我一直试图了解这里出了什么问题,我需要一双新的眼睛。

我有一个处理 Paypal 付款通知的 CGI 应用程序。当有人订阅时,我实际上得到了一个订阅 IPN,然后是一个支付 IPN。On 就在另一个之后,所以我启动了两个 CGI 进程。我为每个日志创建一个单独的日志,并且时间戳是相同的(时间戳的分辨率 - 秒)。

CGii 应用程序旨在为新订户创建用户帐户,然后支付 IPN 将信息添加到新创建的帐户中。很简单。

问题是第二个 IPN 无法找到该帐户。我认为这是因为它在第二个 IPN 去寻找它时已经完成创建,所以我将第二个 IPN 延迟了 5 秒。

现在时间戳显示为第一个 IPN 创建帐户的函数在第二个 IPN 开始查找它之前已返回,这意味着在发出第一个 SELECT 之前插入已完成。没运气。

我想知道这是否是缓存问题: http ://dev.mysql.com/tech-resources/articles/mysql-query-cache.html 但我不这么认为。

我在这里根本没有使用 TRANSACTIONS,但是在第二个 CGI 应用程序发出它的 SELECT 之前,我没有释放第一个 CGI 应用程序的句柄,但这应该无关紧要。我想我可以尝试发布一个我可能忽略了一些简单的事情,但我已经尝试了解这里出了什么问题了几个星期,我需要一双新的眼睛。

我有一个处理 Paypal 付款通知的 CGI 应用程序。当有人订阅时,我实际上得到了一个订阅 IPN,然后是一个支付 IPN。On 就在另一个之后,所以我启动了两个 CGI 进程。我为每个日志创建一个单独的日志,并且时间戳是相同的(时间戳的分辨率 - 秒)。

CGii 应用程序旨在为新订户创建用户帐户,然后支付 IPN 将信息添加到新创建的帐户中。很简单。

问题是第二个 IPN 无法找到该帐户。我认为这是因为它在第二个 IPN 去寻找它时已经完成创建,所以我将第二个 IPN 延迟了 5 秒。

现在时间戳显示为第一个 IPN 创建帐户的函数在第二个 IPN 开始查找它之前已返回,这意味着在发出第一个 SELECT 之前插入已完成。没运气。

我想知道这是否是缓存问题: http ://dev.mysql.com/tech-resources/articles/mysql-query-cache.html 但我不这么认为。

我没有使用 TRANSACTIONS,但我没有尝试在 INSERT 之后发出 COMMIT。

我在这里想念什么?

4

1 回答 1

1

MYISAM 表不支持事务,所以那里不会有问题。没有任何代码可看,老实说,在我看来,您的第二个查询使用了错误的 id。除了时间戳之外,您还记录什么?我会记录整个查询并确保 id 对应并且第二个查询正在寻找正确的记录。也许尝试仅使用 SQL 手动重现这种情况,并在测试查询时将脚本排除在外。

于 2009-04-30T08:01:30.183 回答