2013-03-23 117 views
-1

嘿所有我所以我能够从json url更新记录并将其放入Mysql中,现在我试图更新记录,并且它只抓取1个值并将所有记录更新为新值所以它在这里只有1记录更新现有记录就是我使用通过json更新mysql数据

$ApiLink  = "JSON URL HERE"; 
$json_decode = (json_decode(file_get_contents($ApiLink), true)); 
$output  = $json_decode["character_list"]; 

/************************************************/ 

$do_stuff = $dbh->prepare("UPDATE damage_given_vehicle SET veh_id=:veh_id, veh_name=:veh_name, veh_total=:total_value, veh_faction_nc=:veh_faction_nc, veh_faction_tr=:veh_faction_tr, veh_faction_vs=:veh_faction_vs WHERE character_number = :char_id"); 

foreach ($output as $key => $value) { 
    $character_id[$key] = $output[$key]["id"]; 

    if (isset($output[$key]["stats"]["vehicle_kills"]["vehicle"])) { 
     $vehicle_kills[$key] = $output[$key]["stats"]["vehicle_kills"]["vehicle"]; 
     foreach ($vehicle_kills[$key] as $row) { 
      $do_stuff->bindValue(':char_id', $update_id); 
      $do_stuff->bindValue(':veh_id', $row["id"]); 
      $do_stuff->bindValue(':veh_name', $row["name"]); 
      $do_stuff->bindValue(':total_value', $row["value"]); 
      $do_stuff->bindValue(':veh_faction_nc', $row["faction"]["nc"]); 
      $do_stuff->bindValue(':veh_faction_tr', $row["faction"]["tr"]); 
      $do_stuff->bindValue(':veh_faction_vs', $row["faction"]["vs"]); 
      $do_stuff->execute(); 
     } 
    } 
} 

数据库看起来像这样在第一次:

key | id | name | value 1 | value 2 | value 3 | value 4 | 
5428029729515051201  11 name_1 6 45 23 34 
5428029729515051201  11 name_2 2 34  63 63 
5428029729515051201  11 name_3 34 0  17 17 

后,我用事实证明这些值到更新脚本:

5428029729515051201  11 name 34 0 17 17 
5428029729515051201  11 name 34 0 17 17 
5428029729515051201  11 name 34 0 17 17 

,如果你很好奇如何脚本这里进入JSON数据你去:

$stmt = $dbh->prepare(" 
    INSERT INTO damage_given_vehicle (
     character_number, veh_id, veh_name, veh_total, 
     veh_faction_nc, veh_faction_tr, veh_faction_vs) 
    VALUES(
     :char_id, :veh_id, :veh_name, :total_value, 
     :veh_faction_nc, :veh_faction_tr, :veh_faction_vs) 
"); 
foreach ($output as $key => $value) { 
    $character_id[$key] = $output[$key]["id"]; 

    if (isset($output[$key]["stats"]["vehicle_kills"]["vehicle"])) { 
     $vehicle_kills[$key] = $output[$key]["stats"]["vehicle_kills"]["vehicle"]; 
     foreach ($vehicle_kills[$key] as $row) { 
      $stmt->bindValue(':char_id', $character_id[$key]); 
      $stmt->bindValue(':veh_id', $row["id"]); 
      $stmt->bindValue(':veh_name', $row["name"]); 
      $stmt->bindValue(':total_value', $row["value"]); 
      $stmt->bindValue(':veh_faction_nc', $row["faction"]["nc"]); 
      $stmt->bindValue(':veh_faction_tr', $row["faction"]["tr"]); 
      $stmt->bindValue(':veh_faction_vs', $row["faction"]["vs"]); 
      $stmt->execute(); 
     } 
    } 
} 

我如何得到它seperately更新每个阵列,如果我做的var_dump在任何$行[ “”]他们产生的数组应该如何显示,但是当它通过并进入mysql时,它只抓取1个值

感谢!

回答

0

你在哪里设置$update_id,你的表中有什么值character_number?对我来说,看起来好像在每个循环中覆盖了表格的每个条目,因为您的where语句中始终有相同的$update_id。所以最后你得到表中每个条目的最后一个循环的值。

但是很难发现,因为你没有发布真正的表格。

+0

你要我发布实际的mysql表吗? $ update_ID是每行通用的主键 – SecretSquirrel 2013-03-23 20:11:57

+0

知道在哪里设置'$ update_id'会很有帮助,因为它没有在您发布在顶部的代码中设置。它的关键在于你完全匹配你想在'WHERE'子句中更新的行。否则,每个循环都会更新错误的或甚至所有的行。 – 2013-03-23 20:19:14

+0

这是$ update_id的最高部分,来自\t $ stmt = $ dbh-> query(“SELECT character_number FROM characters”); \t#设置获取模式 \t $ stmt-> setFetchMode(PDO :: FETCH_ASSOC); \t while($ update_stats = $ stmt-> fetch()){ \t \t $ update_id = $ update_stats [“character_number”]; – SecretSquirrel 2013-03-23 22:02:24