2013-03-23 2 views
-1

안녕하세요. 저는 json URL에서 레코드를 업데이트하고 Mysql에 넣을 수있게되었습니다. 이제 레코드를 업데이트하려고 시도하고 있습니다. 단지 하나의 값만 가져오고 모든 레코드를 새로운 값으로 업데이트합니다 나는 그것이로 그 값을 변 업데이트 스크립트를 사용 후json을 통해 mysql 데이터 업데이트

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 

: 그래서 그 여기에 단지 1 레코드와 기존 레코드를 업데이트하는 것은 내가 데이터베이스가 처음에는 다음과 같습니다

$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(); 
     } 
    } 
} 

을 사용하고 무엇 :

스크립트가 여기에 JSON 데이터를 입력하는 방법을 궁금해하는 경우 63,210
5428029729515051201  11 name 34 0 17 17 
5428029729515051201  11 name 34 0 17 17 
5428029729515051201  11 name 34 0 17 17 

당신은 갈 :

$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(); 
     } 
    } 
} 

를 나는 내가 $ 행의에 위해서 var_dump를 할 경우는, 별도로 각 배열을 업데이트하려면 어떻게합니까 [ ""그들은 배열을 어떻게 표시해야하는지 알 수 있지만, mysql을 통해 들어가면 1 값만 가져옵니다.

고맙습니다!

답변

0

여기서 $update_id을 설정하고 테이블에 whats 값을 character_number으로 설정합니까? 모든 경우에 항상 이 있기 때문에 모든 루프 내에서 테이블의 모든 항목을 덮어 쓰는 것처럼 보입니다. where 문에 나와 있습니다. 마지막에는 테이블의 모든 항목에 대한 마지막 루프의 값을 얻습니다.

하지만 실제 테이블을 게시하지 않았기 때문에 찾기가 어렵습니다.

+0

실제 mysql 테이블을 게시 하시겠습니까? $ update_ID는 각 행에 공통적 인 기본 키입니다. – SecretSquirrel

+0

상단에 게시 한 코드에 설정되지 않았기 때문에'$ update_id'를 어디에 설정했는지 알면 도움이됩니다. 'WHERE' 절에서 업데이트하려는 행과 정확히 일치하는 것이 중요합니다. 그렇지 않으면 모든 행에서 잘못되거나 모든 행이 업데이트됩니다. –

+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

관련 문제