2014-07-15 23 views
2

我試圖從使用PHP的JSON feed將數據導入到MySQL數據庫中。從Import.io導入MySQL數據庫中的JSON

我有下面的代碼,但沒有得到它的任何地方。

我只是得到Connected to Database但沒有任何東西從JSON數據中被拉入。

正在使用import.io從feed中創建JSON數據。

任何幫助表示讚賞

JSON數據here

<?php 

$data = file_get_contents('https://query.import.io/store/connector/e18543ae-48d1-47d3-9dc7-c3d55cab2951/_query?_user=363ec2db-fb95-413f-9a20-3fe89acbf061&_apikey=HOXvwSMX4HlmqH123i5HeELV6BwKq%2BFRInTzXc4nfl5VtP0pJyChxMT9AEiu1Ozi0vWZmUB%2BKcSsxHz2ElHNAg%3D%3D&format=JSON&input/webpage/url=http%3A%2F%2Fsports.yahoo.com%2Fgolf%2Fpga%2Fleaderboard'); 

$array = json_decode($data, true); 
$rows = array(); 

$index = 0; 

foreach($array['results'] as $mydata) 
    { 
     print_r($mydata); 
     echo "<br>"; 

     foreach($mydata as $key => $value) 
      { 
       print_r ($key); 
       print_r ($value); 
       echo $index; 
       echo "<br><br>"; 
       $rows[] = "('" . $value . "')"; 
      } 
     echo "<br>"; 
     $index++; 
    } 

echo "<br><br><br>"; 
print_r ($rows); 

$values = implode(",", $rows); 
echo "<br><br><br>"; 
print_r ($values); 

$hostname = 'localhost';     // write the rest of your query 
$username = 'username'; 
$password = 'password'; 

try 
{ 
    $dbh = new PDO("mysql:host=$hostname;dbname=database", $username, $password); 
    echo 'Connected to database<br />'; // echo a message saying we have connected 
    $count = $dbh->exec("INSERT INTO import_io (total, round_1, round_2, round_3, round_4, thru, name/_source, name, today, name/_text, strokes) VALUES ($values)"); 
    echo $count;// echo the number of affected rows 
    $dbh = null;// close the database connection 
} 
catch(PDOException $e) 
{ 
    echo $e->getMessage(); 
} 

?> 
+0

在從import.io提取數據後,您嘗試將數組轉換爲foreach循環中的字符串後,您的php代碼出現了一些錯誤。所以你的結果是這樣的:'('0','Array')('1','Array')'...試着做一個'print_r($ values)'來檢查你正在嘗試的值插入DB – Cristian

+0

'foreach($ array ['results'] as $ key => $ value) $ rows [] =「('」。$ key。「','。。$ value。」')「 ;' 所以這一行工作不正常?我只是想知道如何解決它,因爲我有麻煩。這是否是JSON有更多的結果,我只想要其中的一部分。即結果部分? – Alan

+0

我已經到了這個地步(我想),我已經將所有需要將數據庫放入名爲'$ values'的變量的數據放入數據庫中,但它仍然無法填充。還有什麼幫助? – Alan

回答

1

首先在這裏我們要獲取每行,然後做另一個循環來獲取包含在該行中的每個值,通過這種方式,我們將獲得一個二維數組,其中包含要格式化後放入數據庫的數據。

$i = 0;  
foreach($array['results'] as $result){ 
    foreach ($result as $key => $value) 
     $rows[$i][] = "'" . $value . "'"; 
    $i++; 
} 

然後,我們在這裏格式化數據,以便適合我們的查詢,該查詢將針對之前獲取的每一行執行。

try{ 
    $dbh = new PDO("mysql:host=$hostname;dbname=database", $username, $password); 
    foreach ($rows as $row) { 
     $row = implode(",",$row); //making a string from an array with each item separated by comma 
     $query = "INSERT INTO import_io (total, round_1, round_2, round_3, round_4, thru, name/_source, name, today, name/_text, strokes) VALUES ($row)<br>"; 
     $count = $dbh->exec($query); 
    } 
    $dbh = null;// close the database connection 
}catch(PDOException $e){ 
    echo $e->getMessage(); 
} 
+0

謝謝你,它似乎給了我現在我想要的,但我的數據庫沒有填充。我已經'print_r($ query);'它向我展示了正確的SQL,因爲我可以在PHPMyAdmin中運行它,並且它可以工作,因此我假設它與連接到數據庫有關。我不得不用'/'把它們改成''name/_source''。再次感謝,我會嘗試解決連接設置問題,但它不會出錯。我需要它週四的工作:(。 – Alan

+0

我逃脫了所有的字段,並在查詢結束時刪除了'
',它工作正常。再次感謝所有的幫助。我還添加了這行'$ stmt = $ dbh - > exec(「TRUNCATE TABLE'import_io'」); '每次爲我清空數據庫,希望這會讓我度過週末的高爾夫! – Alan