0

次のコードがあります。

while(1){
    $r = rand(0,9); 
    echo "running...";

    if($current_item  >= $array[$r]['limiter']){
        $foo = $foo;
        $bar = $bar;
        mysql_query("INSERT INTO db (type, hp) VALUES ('$foo', '$bar')");
        echo "done.";
        break 1;
    }
}

これを実行すると"running..."、予想どおり、1 回または数回 (予想どおり)"done."エコー アウトされ、1 回エコー アウトされます。

それでも、if ステートメント全体が 2 回実行されたことを示唆する異なる情報を含む 2 つのエントリがデータベースに挿入されます。

誰もこれに遭遇したことがありますか?ここに表示されていない何かが起こっているのでしょうか? これを修正する方法はありますか?

Updates にも同様の問題があります。更新も 2 回行われ、ループから完全に切り離されています。

編集:明確にするために、

  • $current_item変化しますが、ループのコンテキストでは一定です。

  • $array[$r]['limiter']多次元配列を参照します。

  • これらのどちらもループ自体に影響を与えるべきではありません。これは、何かを行うために満たす必要がある単なる条件です。

4

1 に答える 1

0

実行できるようにコードを少し変更しました。実行したコードは次のとおりです。

    for ($r=0;$r<10;++$r) {
        $array[$r]['limiter'] = $r;
    }
    $current_item = 3;
    $foo = 1;
    $bar = 2;

    while(1){
    $r = rand(0,9); 
        echo "running...";

    if($current_item  >= $array[$r]['limiter']){
        $foo = $foo;
        $bar = $bar;
        echo 'do_query: '."INSERT INTO db (type, hp) VALUES ('$foo', '$bar')";
                echo "done.";
        break 1;
    }

そして応答:

1 回目: 実行中... do_query: INSERT INTO db (type, hp) VALUES ('1', '2')done.

2番目: running... running... running... do_query: INSERT INTO db (type, hp) VALUES ('1', '2')done.

3番目: running... running... do_query: INSERT INTO db (type, hp) VALUES ('1', '2')done.

したがって、クエリはこのコードで 1 回だけ実行されます。問題は while の前のコードにあるはずなので、while に 2 回入ります。

于 2012-09-21T20:29:12.780 に答える