sql >> Database >  >> RDS >> Mysql

JSON-gegevens ontleden en invoegen in MySQL

  1. Converteer json niet blindelings naar associatieve array. Het zorgt voor meer problemen.
  2. Gebruik tijdelijke aanduidingen zoals $data->{'$ts'} voor toegang tot eigenschappen die speciale tekens of gereserveerde woorden bevatten
  3. Zo nodig door arrays en objecten bladeren.
  4. Een automatisch oplopende id toevoegen kolom naar tabellen helpt bij het opslaan van gegevens voor één apparaat.
  5. Het is een goed idee om time toe te voegen naar error_log tafel ook

Getest hieronder korte versie van uw oorspronkelijke vraag en het werkt.

<?php
        $_user = 'root';
        $_password= 'root';
        $_db = 'localtest';
        $_host = 'localhost';
        $_port = 3306;
    $con = new mysqli($_host, $_user, $_password, $_db) or die(mysql_error);

    //read the json file contents
    $jsondata = file_get_contents('test.json');

    //do not convert to array
    $json = json_decode($jsondata);

    $id = $json->device->sn;
    foreach($json->data as $key => $data){
        if(empty($data) || !isset($data->{'$ts'})){
            continue;
        }
        if (isset($data->{'$msg'})){
            $msg = $data->{'$msg'};
            $time = $data->{'$ts'};

            $sql="INSERT into error_log (sn, time, MSG) VALUES (?,?,?); ";
            $stmt = $con-> prepare($sql);
            $stmt -> bind_param("iss", $id,$time, $msg);
            $stmt -> execute();
        }else{
            $time = (isset($data->{'$ts'}))? $data->{'$ts'}:'';
            $RH = (isset($data->RH))? $data->RH:'';
            $AT = (isset($data->AT))? $data->AT:'';
            $MINVi = (isset($data->MINVi))? $data->MINVi:'';

            //insert into mysql table
            $sql="INSERT into test (sn, date, RH, AT, MINVi) VALUES (?,?,?,?,?); ";
            $stmt = $con-> prepare($sql);
            $stmt -> bind_param("issss", $id,$time,$RH,$AT,$MINVi);
            $stmt -> execute();
        }


    }
    mysqli_close($con);

?>


  1. Hoe kan ik kolommen in MySQL vertragen?

  2. PostgreSQL-functie / opgeslagen procedure CURRENT_TIMESTAMP verandert niet

  3. Waarom is het resultaat van `select 'a'=0;` 1?

  4. MySQL InnoDB SELECTEER ... LIMIET 1 VOOR UPDATE Vs UPDATE ... LIMIET 1