1

私は非常に混乱しており、検索しています。しかし、タイトルが示すように、配列を入力しようとしています。私の質問は、この配列をデータベースにインポートするにはどうすればよいですか? 現在のスクリプトでは、最初のレコードのみをインポートし、残りはインポートしません。ここでも、同じ配列内に他の値をインポートできます。これはちなみに JSON 呼び出しであり、既にデコードされています。

foreach ($output as $key => $value) {
    if (isset($output[$key]["stats"]["damage_given"]["vehicle"])) {
        $damage_given[$key] = $output[$key]["stats"]["damage_given"]["vehicle"];
            foreach ($damage_given[$key] as $vehicle_name) {
                $vehicle_dmg_id         = $vehicle_name['id'];
                $vehicle_dmg_name       = $vehicle_name['name'];
                $vehicle_dmg_value      = $vehicle_name['value'];
                $vehicle_dmg_faction_nc = $vehicle_name['faction']['nc'];
                $vehicle_dmg_faction_tr = $vehicle_name['faction']['tr'];
                $vehicle_dmg_faction_vs = $vehicle_name['faction']['vs'];
            }
     }
}

$add_dmg_veh = "INSERT INTO damage_given(character_number, vehicle_id,
vehicle_name, total_value, vehicle_faction_nc, vehicle_faction_tr,
vehicle_faction_vs) VALUES ('$character_id[$key]', '$vehicle_dmg_id', 
'$vehicle_dmg_name','$vehicle_dmg_value', '$vehicle_dmg_faction_nc', 
'$vehicle_dmg_faction_tr','$vehicle_dmg_faction_vs')";
4

6 に答える 6

1

配列をデータベースに格納することはお勧めしませんがserialize()、配列をデータベースに格納することはできます。基本的に、PHP は配列を特別に細工された文字列に変換し、後で解釈できるようにします。

シリアル化してデータベースに保存し、シリアル化を解除してデータベースから引き出すときに操作します

注:データベースはFirst Normal Formではないため、特にデータベースの特定のエントリ内に非アトミック値を格納しているため、シリアライゼーションはお勧めしません。この場合、これらの値を個別に格納できる別のテーブルを作成し、2 つのテーブルを外部キーでリンクすることをお勧めします。

于 2013-03-17T15:35:02.167 に答える
0

挿入データを配列に構築してから、結果を 1 つのクエリにまとめてみてください。

<?php
foreach ($output as $key => $value) {
    if (isset($output[$key]["stats"]["damage_given"]["vehicle"])) {
        $damage_given[$key] = $output[$key]["stats"]["damage_given"]["vehicle"];
            foreach ($damage_given[$key] as $vehicle_name) {

                $sql[] = "
                    (
                    ".$vehicle_name['id'].",
                    ".$vehicle_name['name'].",
                    ".$vehicle_name['value'].",
                    ".$vehicle_name['faction']['nc'].",
                    ".$vehicle_name['faction']['tr'].",
                    ".$vehicle_name['faction']['vs']."
                    )";
            }
    }
}

$query = "
INSERT INTO damage_given
(
character_number,
vehicle_id, 
vehicle_name, 
total_value, 
vehicle_faction_nc, 
vehicle_faction_tr, 
vehicle_faction_vs
) 
VALUES
".implode(",",$sql)."
";
?>
于 2013-03-17T15:49:17.703 に答える
0

PDO_MySQL について調べる必要があり、挿入文字列はループの外にあり、ループ内で実行する必要があります。

于 2013-03-17T15:35:08.303 に答える
0

配列を反復処理し、配列のすべてのフィールドを独自に挿入する必要があります。

foreach($array as $value) {
    // execute your insert statement here with $value
}
于 2013-03-17T15:35:15.583 に答える
0

まず第一に、あなたがやっているようにMySQLに配列を挿入することはできません..反復と同じように..

foreach ($output as $key => $value) {
    if (isset($output[$key]["stats"]["damage_given"]["vehicle"])) {
        $damage_given[$key] = $output[$key]["stats"]["damage_given"]["vehicle"];
            foreach ($damage_given[$key] as $vehicle_name) {
                $vehicle_dmg_id         = $vehicle_name['id'];
                $vehicle_dmg_name       = $vehicle_name['name'];
                $vehicle_dmg_value      = $vehicle_name['value'];
                $vehicle_dmg_faction_nc = $vehicle_name['faction']['nc'];
                $vehicle_dmg_faction_tr = $vehicle_name['faction']['tr'];
                $vehicle_dmg_faction_vs = $vehicle_name['faction']['vs'];


                // if you wants to use insert query then do here.
                $add_dmg_veh = "INSERT INTO damage_given(character_number, vehicle_id, 
                vehicle_name, total_value, vehicle_faction_nc, vehicle_faction_tr, 
                vehicle_faction_vs) VALUES ('$character_id[$key]', '$vehicle_dmg_id',
                '$vehicle_dmg_name', '$vehicle_dmg_value', '$vehicle_dmg_faction_nc',
                '$vehicle_dmg_faction_tr', '$vehicle_dmg_faction_vs')";

            }
    }
}
于 2013-03-17T15:37:31.263 に答える
0

これが私が問題を解決するために得たものです!

$stmt = $dbh->prepare( "INSERT INTO kills_vehicle (character_number, veh_id, veh_name, veh_total, veh_faction_nc, veh_faction_tr, veh_faction_vs) VALUES(:char_id, :id, :vehname, :total_value, :faction_nc, :faction_tr, :faction_vs )");

    foreach ($output as $key => $value) {
        if (isset($output[$key]["stats"]["play_time"]["vehicle"])) {
            $character_id[$key]    = $output[$key]["id"];
            $score_hit_count[$key] = $output[$key]["stats"]["kills"]["vehicle"];
            foreach ($score_hit_count[$key] as $row) {

                $stmt->bindValue(':char_id', $character_id[$key]);
                $stmt->bindValue(':id', $row[id]);
                $stmt->bindValue(':vehname', $row[name]);
                $stmt->bindValue(':total_value', $row[value]);
                $stmt->bindValue(':faction_nc', $row[faction][nc]);
                $stmt->bindValue(':faction_tr', $row[faction][tr]);
                $stmt->bindValue(':faction_vs', $row[faction][vs]);
                $stmt->execute();
            }
        }
    }
于 2013-03-18T16:07:06.380 に答える