情况类似如下: 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无法选择或因为无法更新? 此外,我需要一个保持交易并给我预期结果的解决方案,即只有一个浏览器可以返回结果!
答案 0 :(得分:0)
您只需在脚本顶部添加set_time_limit(0);
,但对于可通过http访问的脚本来说,这不是一个好的解决方案。
答案 1 :(得分:0)
您的脚本输入dead lock
。为避免这种情况,请在查询中添加ORDER BY
,以确保两个查询都尝试以相同的顺序选择记录。还要确保amount
上有索引,否则查询将必须锁定整个表。