【问题标题】:How to insert .json file having null values to mysql?如何将具有空值的.json文件插入mysql?
【发布时间】:2019-12-22 09:43:39
【问题描述】:

我想将 .json 数据插入 MySQL。我使用了这里的代码(Decode Json data Array and insert in to mysql),但我遇到了空值问题。

json 文件(示例)

[{'counsel_id':'2019-000005', 'big_cate':'Smartphone', 
'mid_cate':'Orange', 'small_cate':'AA', 
'title':'faceID doesn't work',
 'question_date':'2019-08-01', 
'question':'faceID doesn't work. how can i fix it?',
'answer-date':'2019-08-01',
'answer':'hello blah blah'
},
{'counsel_id':'2019-000015', 'big_cate':'Smartphone',
 'mid_cate':'Star', 'small_cate':'BB', 
'title':'Fingerprint Recognition doesn't work',
 'question_date':'2019-08-10', 
'question':'Fingerprint Recognition doesn't work. how can i fix it?',
'answer-date':'2019-08-11',
'answer':'hello blah blah'
},
{'counsel_id':'2019-000018', 'big_cate':'Smartphone', 
'mid_cate':'Orange', 'small_cate':'AA',
 'title':'The screen broken', 
'question_date':'2019-08-16', 
'question':'How much will it cost to fix it??'
}]

MySQL 表

CREATE TABLE IF NOT EXISTS `counsel` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `counsel_id` CHAR(13) NOT NULL,
  `big_cate` VARCHAR(15) NOT NULL,
  `mid_cate` VARCHAR(15) NOT NULL,
  `small_cate` VARCHAR(15) NOT NULL,
  `title` VARCHAR(45) NOT NULL,
  `question_date` DATETIME NOT NULL,
  `question` TEXT NOT NULL,
  `answer_date` DATETIME NULL,
  `answer` TEXT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

php代码

<?php

$jsonFile="final_03.json";
$jsondata = file_get_contents($jsonFile);
$data = json_decode($jsondata, true);

$servername = "localhost";
$username = "root";
$password = "mypassword";
$dbname = "myDBname";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


foreach ($data as $row) {
    $sql = "INSERT INTO counsel (counsel_id, big_cate, mid_cate, small_cate,
 title, question_date, question) 
VALUES ('" . $row["receiptNum"] . "', '" . $row["gooboon"] . "',
'" . $row["itemCode"] . "','" . $row["item"] . "',
'" . $row["title"] . "','" . $row["date"] . "',
'" . $row["question"] . "')";
    $conn->query($sql);
}

$conn->close();
?>

我想将所有 json 数据插入 MySQL,但是当 json 文件没有 'answer-date'、'answer' 时出现错误。如果json列表没有'answer-date'、'answer',我想添加一个空值。谁能帮帮我?

(+) 我用函数解决了 (array_key_exists())

    if (array_key_exists('answerDate', $row)) {
        $sql = "INSERT INTO counsel (counsel_id, big_cate, mid_cate, small_cate, title, question_date, question, answer_date, answer) VALUES ('" . $row["receiptNum"] . "', '" . $row["gooboon"] . "','" . $row["itemCode"] . "','" . $row["item"] . "','" . $row["title"] . "','" . $row["date"] . "','" . $row["question"] . "', '" . $row["answerDate"] . "','" . $row["answer"] . "')";
        echo "answer exists!";
    } else {
        $sql = "INSERT INTO counsel (counsel_id, big_cate, mid_cate, small_cate, title, question_date, question) VALUES ('" . $row["receiptNum"] . "', '" . $row["gooboon"] . "','" . $row["itemCode"] . "','" . $row["item"] . "','" . $row["title"] . "','" . $row["date"] . "','" . $row["question"] . "')";
        echo "answer doesn't exists!";
    }
    $conn->query($sql);

【问题讨论】:

    标签: php mysql json insert


    【解决方案1】:

    试试这个,因为你永远不知道传入的值是否为空,最好先检查它并将其分配给 var 以便更好地操作:

    SQL 表:

    CREATE TABLE IF NOT EXISTS `counsel` (
      `id` INT NOT NULL AUTO_INCREMENT,
      `counsel_id` CHAR(13) NOT NULL,
      `big_cate` VARCHAR(15) NULL,
      `mid_cate` VARCHAR(15) NULL,
      `small_cate` VARCHAR(15) NULL,
      `title` VARCHAR(45) NULL,
      `question_date` DATETIME CURRENT_TIMESTAMP,
      `question` TEXT NULL,
      `answer_date` DATETIME ON UPDATE CURRENT_TIMESTAMP,
      `answer` TEXT NULL,
      PRIMARY KEY (`id`))
    ENGINE = InnoDB;
    
    //represent SQL table attributes
    //better way to add attribute NULL on EMPTY
     $data_init = [
      `counsel_id`,
      `big_cate`,
      `mid_cate`,
      `small_cate`,
      `title`,
      `question_date`,
      `question`,
      `answer_date`,
      `answer`,
    }
    
    
    
         $json = //incoming JSON array
    
            $arrays = json_decode($json) //we have got an array with items
    
            //next run thru foreach loop
            foreach($data_init as $key => $data){
                (!isset($arrays[$data])) ? $small_cate = 'Not provided' : $data[`small_cate`];
                //... sinse you know exactly all rows just run like this thru it
                // and get all vars assigned
            }
    
        $sql = "INSERT INTO counsel (counsel_id, big_cate, mid_cate, small_cate,
         title, question_date, question) 
        VALUES (
             '" . $receiptNum . "'
             //...all values from $data_init
        )";
        $conn->query($sql);
    
    //here bind() vars to query
    

    【讨论】:

    • 嗨 :) 我在您编辑之前看到了答案,但它没有用。但是我从你的回答中得到了一个想法,并使用一个函数来检查键值来修复它!谢谢。
    • @wendykr 我的代码有什么问题,告诉我,我会修复以供将来参考。
    • 抱歉,回答迟了。 '//...all values from $data_init' 出现错误,错误消息是'Undefined variable: receiveNum in /Users/.../.../counsel.php on line...'
    • @wendykr 哦,嗯,这很有趣......我会明白的,谢谢。
    猜你喜欢
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2016-10-03
    • 2021-05-03
    相关资源
    最近更新 更多