table_calc结构(最小化)是:
| id | value_1 | value_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++;
}
但它不起作用
你能帮忙吗?
答案 0 :(得分:0)
我可以在你的代码上发现一些问题:
第8行:
$cal_id = $rrows_update[id];
^^
你需要报价。
因此更正的版本将是:
$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 ,以确保所有更改都按预期进行注册。