2012-11-03 79 views
1

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

你是對的,錯誤很明顯。 thk爲交易 – bogdA

回答

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,以確保所有的改變都如預期註冊。

+0

如何使$ cal_value_1和$ cal_value_2的$ cal_id不同?假設在一種情況下:$ cal_id返回1到7,$ cal_value_1去1到5,$ cal_value_w去3到6 – bogdA