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