1

table_calc 结构(最小化)是:

| 编号 | 值_1 | 值_2 |

行数在 70 到 250 之间或更多。

我想用其他计算($value_update_1 和 2,...)产生的值更新“table_calc”中的字段,这些值应用于表中的字段不同。

在我在网页上使用表格并从那里更新表格之前。现在我想直接更新这些值,而不必在页面中使用它们,因为它应该可以工作。

我开始写下面的代码:

$stmt_update = $conn_bd->prepare('select * from table_calc');
$stmt_update->execute(array());
$result_stmt_update = $stmt_update->fetchAll();
foreach($result_stmt_update as $rrows_update) {
  $cal_id = $rrows_update[id];
  $cal_value_1 = $rrows_update['value_1'];
  $cal_value_2 = $rrows_update['value_2'];
}

$value_update_1 = 100.25;
$value_update_2 = 150.25;

$count_id = count($cal_id);
$stmt = $conn_bd->prepare('UPDATE table_calc SET value_1 = :value_1, value_2 = :value_2 WHERE id = :id');
$i = 0;
while($i < $count_id) {
  $stmt->bindParam(':value_1', '.$cal_value_1[$i].' * '.$value_update_2.');
  $stmt->bindParam(':value_2', '.$cal_value_2[$i].' * '.$value_update_1.');
  $stmt->bindParam(':id', $cal_id[$i]);
  $stmt->execute();
  $i++;
}

但它不起作用

你能帮我吗?

4

1 回答 1

0

我可以在您的代码中发现一些问题:

  • 第 8 行:

    $cal_id = $rrows_update[id];
                            ^^
    

    你需要那里的报价。

  • 在第 20 行,您将变量称为数组,但您没有在第 9-10 行将其设置为这样。
  • 同样在第 20 行,您应该将最终值绑定到参数,而不是让 MySQL 对其进行评估。

所以更正的版本是:

$stmt_update = $conn_bd->prepare('select * from table_calc');
$stmt_update->execute(array());
$result_stmt_update = $stmt_update->fetchAll();
foreach ($result_stmt_update as $rrows_update) {
    //Added array push operators. To make them arrays.
    $cal_id[]      = $rrows_update["id"];
    $cal_value_1[] = $rrows_update['value_1'];
    $cal_value_2[] = $rrows_update['value_2'];
}

$value_update_1 = 100.25;
$value_update_2 = 150.25;

$count_id = count($cal_id);
$stmt     = $conn_bd->prepare('UPDATE table_calc SET value_1 = :value_1, value_2 = :value_2 WHERE id = :id');
$i        = 0;
while ($i < $count_id) {
    //Altered the binding so that you bind the final value.
    //Also changed to bindValue.
    $stmt->bindValue(':value_1', $cal_value_1[$i] * $value_update_2);
    $stmt->bindValue(':value_2', $cal_value_2[$i] * $value_update_1);
    $stmt->bindValue(':id', $cal_id[$i]);
    $stmt->execute();
    $i++;
}

此外,在对数据库进行批量更改时,您可能需要使用Transactions来确保所有更改都按预期注册。

于 2012-11-03T14:15:09.057 回答