-1

こんにちは、json url からレコードを更新して Mysql に入れることができるようになりました。レコードを更新しようとしていますが、1 つの値のみを取得し、すべてのレコードを新しい値に更新するため、既存のレコードのみを更新します。ここの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();
        }
    }
}

データベースは最初は次のようになります。

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

すべての配列を個別に更新するにはどうすればよいですか。$row[""] のいずれかで var_dump を実行すると、配列がどのように表示されるかが生成されますが、それが通過して mysql に入ると、値は 1 つしか取得されません

ありがとう!

4

1 に答える 1

0

テーブルのどこに設定$update_idし、値は何ですか? 私にとっては、ステートメントにあるものがcharacter_number常に同じであるため、すべてのループ内でテーブルのすべてのエントリを上書きしているように見えます。したがって、最終的には、テーブル内のすべてのエントリの最後のループの値を取得します。$update_idwhere

ただし、実際のテーブルを投稿していないため、見つけるのは困難です。

于 2013-03-23T14:51:01.277 に答える