php - 如何将具有空值的.json文件插入mysql?

标签 php mysql json insert

我想将.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);

最佳答案

试试这个,因为你永远不知道传入的值是否为空,最好先检查它并将其分配给 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

关于php - 如何将具有空值的.json文件插入mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518316/

相关文章:

javascript - 奇怪的行为 json_decode

php - jquery 窗口位置在 php echo 中不起作用?

C#反序列化Json未知键

mysql - laravel 高级连接 5 个表,其中 2 个表进行比较

用于获取 MySQL 文件名的 PHP PDO

python - 如何序列化其成员不可直接序列化但其 str() 表示可序列化的对象?

java - 是否可以通过 API 将一个复杂对象的 JSON 数据解析为自定义对象

javascript - 如何在数据中传递数组(ajax)

javascript - 搜索框值替换为所选页码

mysql - 获取具有相同 mid 的其他 user_ids