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..."一次或几次回显(这是预期的)并"done."回显一次,正如预期的那样。

然而,两个条目将被插入到数据库中,其中包含暗示整个 if 语句运行了两次的不同信息。

有没有人遇到过这个?有没有我在这里看不到的事情发生?任何想法如何解决这一问题?

我对更新也有类似的问题,它们也更新了两次,并且与循环完全分开。

编辑:只是为了澄清,

  • $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;
    }

和回应:

第一次:运行...do_query:INSERT INTO db (type, hp) VALUES ('1', '2')done。

第二:运行...运行...运行...do_query:INSERT INTO db (type, hp) VALUES ('1', '2')done。

第三:运行...运行...do_query:INSERT INTO db (type, hp) VALUES ('1', '2')done。

所以查询只用这段代码执行一次。问题肯定出在while之前的一段代码中,所以2次进入while。

于 2012-09-21T20:29:12.780 回答