InnoDB FOR UPDATE事务导致php致命错误,最长执行时间

时间:2012-07-25 23:25:00

标签: php mysql transactions innodb cakephp-1.2

情况类似如下: 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的值。但是,该脚本返回胎儿错误

  

块引用   致命错误:超过30秒的最长执行时间

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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