任何配置或INNODB原则是否会导致以下MYSQL更新不一定执行所有更新?

时间:2010-07-01 12:56:14

标签: php mysql innodb

<?php
    $query = 'SELECT id FROM transaction_table';
    $result = db_query($query);  
    while($row = db_fetch_array($result)) {    
        //do some processing
        db_query('UPDATE transaction_table SET updated = "1" WHERE id = "%s"',$row['id']);
    }
?>

每次运行此脚本时,它只会更新几个随机行(平均为8-25行)。它应该更新所有行。

2 个答案:

答案 0 :(得分:1)

在每个循环上回显查询。我的猜测是有一些错误。使用此代码:

<?php
    $query = 'SELECT id FROM transaction_table';
    $result = db_query($query);  
    while($row = db_fetch_array($result)) {    
        //do some processing
        echo 'UPDATE transaction_table SET updated = "1" WHERE id = "'.$row['id'].'"<br>';
        db_query('UPDATE transaction_table SET updated = "1" WHERE id = "%s"',$row['id']);
    }
?>

尝试直接在MySQL中手动运行每个查询,并验证每个查询是否会运行。我在代码中看不到会导致任何问题的任何内容。

答案 1 :(得分:0)

我能想到的唯一原因是,这将无法更新SELECT之后插入的行。

我希望我误解了这一点,但Drupal db_fetch_array reference将此功能描述为:

  

从上一个查询中获取一个结果行作为数组。

这并不意味着以前的查询吗?我希望您一次可以激活多个查询。请注意,我从未使用过Drupal,所以我不确定文档是多么的文字。如果文档可以按字面读取,那么我会担心db_query('UPDATE...')会导致下一个db_fetch_array调用以某种方式出错。