sql >> Databáze >  >> RDS >> Mysql

Analýza dat JSON a vkládání do MySQL

  1. Nepřevádějte json na asociativní pole slepě. Vytváří další problémy.
  2. Pro přístup k vlastnostem obsahujícím speciální znaky nebo vyhrazená slova použijte zástupné symboly jako $data->{'$ts'}
  3. V případě potřeby procházejte pole a objekty.
  4. Přidání automatického přírůstku id sloupec k tabulkám pomáhá ukládat data pro jedno zařízení.
  5. Je dobré přidat time do error_log stůl také

Testováno níže uvedenou zkrácenou verzí vaší původní otázky a funguje to.

<?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. Výpočet průměrných hodnot za úseky data/času

  2. Správný způsob, jak se zeptat, zda mysql_num_rows v PHP

  3. Jak exportovat databázi mysql pomocí příkazového řádku?

  4. volání členské funkce execute() na neobjektu