Intereting Posts

Импортировать файл JSON в базу данных MYSQL с помощью php

Я пытаюсь вставить файл JSON в мою базу данных MYSQL. Но только вторая строка вставляется каждый раз, когда я запускаю этот скрипт. а также множество ошибок для «Недопустимый аргумент, предоставленный foreach ()»

Я получил этот скрипт с другой веб-страницы, но я не могу заставить его работать гладко! Кто-то может помочь мне?

PHP-скрипт:

<?php $con = mysql_connect("localhost","***","***"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("***", $con); $f = file_get_contents('http://.../data.json'); $arr = explode('},',$f); // Prepare for json_decode BUT last } missing $global_arr = array(); // Contains each decoded json (TABLE ROW) $global_keys = array(); // Contains columns for SQL if(!function_exists('json_decode')) die('Your host does not support json'); for($i=0; $i<count($arr); $i++) { $decoded = json_decode($arr[$i].'}',true); // Reappend last } or it will return NULL $global_arr[] = $decoded; foreach($decoded as $key=> $value) { $global_keys[$key] = ''; } } // iterate $global_arr for($i=0; $i<count($global_arr); $i++) // this is faster than foreach { // NOW use what ardav suggested foreach($global_arr[$i] as $key => $value){ $sql[] = (is_numeric($value)) ? "`$key` = $value" : "`$key` = '" . mysql_real_escape_string($value) . "'"; } $sqlclause = implode(",",$sql); $rs = mysql_query("INSERT INTO temp_table SET $sqlclause"); } // for i // ?> 

ошибки:

 Warning: Invalid argument supplied for foreach() in ***.php on line 21 Warning: Invalid argument supplied for foreach() in ***.php on line 21 Warning: Invalid argument supplied for foreach() in ***.php on line 31 Warning: implode() [function.implode]: Invalid arguments passed in ***.php on line 34 Warning: Invalid argument supplied for foreach() in ***.php on line 31 

Файл Json:

 { "data": [ { "name": "name freiend 1", "id": "friend id 1" }, { "name": "name freiend 2", "id": "friend id 2" }, { "name": "name freiend 3", "id": "friend id 3" } ], "paging": { "next": "https://graph.facebook.com/100002295143005/friends?access_token=***" } } 

Попробуйте разобрать весь JSON-файл вместо одной части и с меньшим количеством циклов:

 $f = file_get_contents('http://.../data.json'); if(!function_exists('json_decode')) die('Your host does not support json'); $feed = json_decode($f); for($i=0; $i<count($feed['data']); $i++) { $sql = array(); foreach($feed['data'][$i] as $key => $value){ $sql[] = (is_numeric($value)) ? "`$key` = $value" : "`$key` = '" . mysql_real_escape_string($value) . "'"; } $sqlclause = implode(",",$sql); $rs = mysql_query("INSERT INTO temp_table SET $sqlclause"); }