0

情况如下: 1- MySQL InnoDB 表进行事务选择,如下所示:

     <?php

        ....
        doQuery('START TRANSACTION');
        $sql = "SELECT * FROM table where amount < 10 FOR UPDATE";
       $res = $doQuery($sql);
// Then a looping through $res includes updates to some fields -amount field- in the same table and set it to values greater than 10

//After the loop
doQuery('COMMIT');

在 XAMPP localhost 上,我打开了两个不同浏览器的窗口,FireFox 和 Opera,同时请求脚本 URL。我希望其中只有一个能够检索 $res 的值。但是,该脚本返回胎儿错误

Blockquote 致命错误:超过 30 秒的最大执行时间

我需要知道这个错误的原因吗?是因为 FireFox 和 Opera 这两个客户端无法选择还是因为它们无法更新?我还需要一个保持交易并给我预期结果的解决方案,即只有一个浏览器可以返回结果!

4

2 回答 2

0

您可以set_time_limit(0);在脚本顶部添加,但对于通过 http 访问的脚本来说,这不是一个好的解决方案。

于 2012-07-25T23:38:52.117 回答
0

您的脚本输入一个dead lock. 为避免这种情况,ORDER BY请在查询中添加一个,以确保两个查询将尝试以相同的顺序选择记录。还要确保有索引amount,否则查询将不得不锁定整个表。

于 2012-08-13T16:35:48.583 回答