<?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行)。它应该更新所有行。
答案 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
调用以某种方式出错。