0

状況は次のようなものです。1-MySQLInnoDBテーブルは次のようにトランザクション選択を受けます。

     <?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ローカルホストで、FireFoxとOperaの2つの異なるブラウザのウィンドウを開き、同時にスクリプトのURLを要求しました。$resの値を取得できるのはそのうちの1つだけだと思います。ただし、スクリプトは胎児エラーを返します

Blockquote致命的なエラー:最大実行時間が30秒を超えました

このエラーの原因を知る必要がありますか?それは、FireFoxとOperaの2つのクライアントが選択できないためですか、それとも更新できないためですか?また、トランザクションを維持し、期待される結果を得るソリューションが必要です。つまり、1つのブラウザーだけが結果を返すことができます。

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 に答える