使用php数组更新MySQL表列

时间:2011-10-17 17:33:01

标签: php mysql arrays

我有以下数组$ weight,我想将这些值存储到mysql表中的weight列。

Array
(
    [0] => 12
    [1] => 14
    [2] => 16
    [3] => 9
    [4] => 7
)

数据库表结构是,

+----------------------------+--------+------+
| Indicators                 | Weight | Rank |
+----------------------------+--------+------+
| Elevation                  |      0 |    0 |
| Distance from the sea      |      0 |    0 |
| Natural Coastal Protection |      0 |    0 |
| Water Bodies               |      0 |    0 |
| Precipitation              |      0 |    0 |
+----------------------------+--------+------+

我期待结果为,

+----------------------------+--------+------+
| Indicators                 | Weight | Rank |
+----------------------------+--------+------+
| Elevation                  |     12 |    0 |
| Distance from the sea      |     14 |    0 |
| Natural Coastal Protection |     16 |    0 |
| Water Bodies               |      9 |    0 |
| Precipitation              |      7 |    0 |
+----------------------------+--------+------+

尝试了以下查询,但似乎没有插入。

foreach($weight as $value)
    {
    $insert_weight="UPDATE geographic_main 
    SET Weight='$value' 
    WHERE Indicators=('Elevation','Distance from the sea',
    'Natural Coastal Protection','Water Bodies', 'Precipitation') ";

我不确定我在WHERE部分是否正确。请建议。         }

3 个答案:

答案 0 :(得分:6)

您需要单独执行每个更新,此时您看起来正在混合使用并尝试将所有行更新为一次。你需要一些东西来识别你想要更新的记录,所以我建议你这样做:

$weights = array(
  'Elevation' => 12,
  'Distance from the sea' => 14,
  'Natural Coastal Protection' => 16,
  // etc.
);

foreach ($weights as $key => $val) {
  $sql = "UPDATE geographic_main SET Weight = '$val' WHERE Indicators = '$key'";
  mysql_query($sql);
}

答案 1 :(得分:3)

您可以在表格中添加“index”或“id”列或使用此代码

$index = 0;
$q = mysql_query("SELECT Indicators FROM geographic_main");
while(list($indicator) = @mysql_fetch_row($q)) {
   mysql_query("UPDATE geographic_main SET Weight='".$weights[$index++]."' WHERE Indicators='$indicator'");
}

但这不是正确的方法

答案 2 :(得分:2)

你真的需要在你的表中使用id列...因为......我如何认识当前的行? 因此,如果您不想使用id列,则可以创建数组索引或字典/关联数组。

$idx = array(
     'Elevation'                      => 0
    ,'Distance from the sea'          => 1
    ,'Natural Coastal Protection'     => 2
    ,'Water Bodies'                   => 3
    , 'Precipitation'                 => 4
);

foreach($idx as $name => $i) {
     mysql_query("UPDATE geographic_main SET Weight = '".$weights[$i]."' WHERE Indicators = '".$name."'";

}

但无论如何最好使用id,因为你获得了更多的方法或数据库引擎。

希望这会有所帮助..祝你有个美好的一天

菲利普