我正在尝试使用PHP将数据从JSON文件发送到MySQL数据库。
我有99%的工作正常,但遇到了一个小障碍,我不知道。这是我的代码:
$con = mysqli_connect($host, $username, $password, $dbname) or die('Error in Connecting: ' . mysqli_error($con));
$st = mysqli_prepare($con, 'INSERT INTO url_feed(url, results, current_date, networks, identifier) VALUES (?, ?, ?, ?, ?)');
mysqli_stmt_bind_param($st, 'sssss', $url, $results, $current_date, $networks, $identifier);
$filename = 'https://www.example.com/random.json';
$json = file_get_contents($filename);
$data = json_decode($json, true);
foreach ($data as $row) {
$url = $row['url'];
$identifier = $row['identifier'];
$current_date = $row['current_date'];
$results = $row['results'];
$networks = $row['networks'];
mysqli_stmt_execute($st);
}
mysqli_close($con);
这是其中包含3个对象的JSON的副本:
[
{
"url":"http://example1.com",
"identifier":495755330,
"current_date":"2015-12-30 17:05:45",
"results":3,
"networks":{
"FaceBook":{"detected":true,"result":"no-result"},
"Twitter Inc":{"detected":false,"result":"no-result"},
"Pinterest.com":{"detected":true,"result":"no-result"},
"Other Sites":{"detected":true,"result":"some-result"}
}
},
{
"url":"http://example2.com",
"identifier":495755331,
"current_date":"2015-12-30 17:05:46",
"results":0,
"networks":{
"FaceBook":{"detected":false,"result":"what-result"},
"Twitter Inc":{"detected":false,"result":"some-result"},
"Pinterest.com":{"detected":false,"result":"some-result"},
"Other Sites":{"detected":false,"result":"what-result"}
}
},
{
"url":"http://example3.com",
"identifier":495755332,
"current_date":"2015-12-30 17:05:47",
"results":1,
"networks":{
"FaceBook":{"detected":false,"result":"some-result"},
"Twitter Inc":{"detected":true,"result":"some-result"},
"Pinterest.com":{"detected":false,"result":"some-result"},
"Other Sites":{"detected":false,"result":"some-result"}
}
}
]
现在,如果我运行脚本,它将像下面这样将其插入数据库:
id | url | results | current_date | networks | identifier | status
1 | http://example1.com | 3 | 2015-12-30 17:05:45 | Array | 495755330 | queued
2 | http://example2.com | 0 | 2015-12-30 17:05:46 | Array | 495755331 | queued
3 | http://example3.com | 1 | 2015-12-30 17:05:47 | Array | 495755332 | queued
但这是我希望输入的方式:
id | url | results | current_date | networks | identifier | status
1 | http://example1.com | 3 | 2015-12-30 17:05:45 | FaceBook,Pinterest.com,Other Sites | 495755330 | queued
2 | http://example3.com | 1 | 2015-12-30 17:05:47 | Twitter Inc | 495755332 | queued
这是我不知道的部分:
它试图以Array的形式输入,这显然不起作用-只是在该networks
列下插入了文本“ Array” 。如果detected
设置为,我只想插入数据库true
。如果不是,我不希望该社交网络在数据库中列出。
如果没有true
为某个对象设置任何社交网络,那么我根本就不想输入该对象。这就是为什么您在我上面的示例中看到某些网络缺失的原因,以及为什么第二行不存在的原因。
而不是$networks = $row['networks'];
使用此:
$a = json_decode($row['networks'], true);
$b = array_filter($a, function($el) {
if ($el['detected'] == true) {
return true;
}
});
$c = implode(', ', array_keys($b));
$networks = $c;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句