sql >> データベース >  >> RDS >> Mysql

JSONデータの解析とMySQLへの挿入

    1. jsonを盲目的に連想配列に変換しないでください。より多くの問題が発生します。
    2. 特殊文字や予約語を含むプロパティにアクセスするには、$data->{'$ts'}などのプレースホルダーを使用します
    3. 必要に応じて配列とオブジェクトをループします。
    4. 自動インクリメントのidを追加する 表の列は、1つのデバイスのデータを保存するのに役立ちます。
    5. timeを追加することをお勧めします error_logへ テーブルも

    元の質問の以下の短いバージョンをテストしました。

    <?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. SQLServer2008のWHERE句内のCASEステートメント

    2. PostgreSQL DESCRIBE TABLE

    3. psycopg2は実際にはデータを挿入していません

    4. 'ANY'を含むPostgreSQLクエリが機能していません