2016-05-05 101 views
1

我試圖從蒸汽用戶插入數據與CS:GO使用PHP數據到MySQL數據庫。我需要將stats數組中的namevalue數值插入MYSQL中,我將在Android應用程序中顯示該數組,但我不確定如何完成該操作。從蒸汽API存儲蒸汽遊戲數據到MySQL數據庫

代碼:

<?php 
    $con = new mysqli('mysql6.000webhost.com','a2689951_Cheesy','ansmh1997', 'a2689951_mSicx'); 
    if (mysqli_connect_error()) { 
     echo mysqli_connect_error(); 
     exit; 
    }    

    $stats = file_get_contents("http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key=<key>&steamid=76561198050187807"); 
    $json = json_decode($stats, true); 
    $stats = array(); 
    foreach ($content['playerstats']['stats'] as $stat) { 
     $stats[$stat["name"]] = $stat["value"]; 
    } 

    $insert = "INSERT INTO user (total_kills, total_deaths) VALUES (?, ?)"; 
    $stmt = $con->prepare($insert); 
    $stmt->bind_param("ss", $total_kills, $total_deaths); 
?> 

API輸出示例:

{ 
    "playerstats": { 
     "steamID": "76561198050187807", 
     "gameName": "ValveTestApp260", 
     "stats": [ 
      { 
       "name": "total_kills", 
       "value": 35179 
      }, 
      { 
       "name": "total_deaths", 
       "value": 30241 
      }, 
      { 
       "name": "total_time_played", 
       "value": 2444377 
      }, 
      // ... 
     ] 
    } 
} 
+0

請同時說明您的真正問題! –

+0

這看起來更好? –

+0

您應該明確指出您遇到問題的部分。否則,這是一個非常廣泛的問題。無論如何,我試圖回答它。 –

回答

0

我覺得你的INSERT語句必須在foreach裏面,試試這個。

$con = mysqli_connect("mysql6.000webhost.com", "a2689951_steam", "password", "a2689951_playerdata"); 

$stats = file_get_contents("http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key=(MyKey)&steamid=(PlayerID)"); 
$json = json_decode($stats, true); 
$stats = array(); 
foreach ($content['playerstats']['stats'] as $stat) { 
    $stats[$stat["name"]] = $stat["value"]; 
    $total_kills = $stats["total_kills"]; 
    $total_deaths = $stats["total_deaths"]; 

    $insert = "INSERT INTO user (total_kills, total_deaths) VALUES ('$statement', 'siss', $total_kills, $total_deaths)"; 
    if ($con->query($insert) === TRUE) { 
     $response = array(); 
     json_encode($response); 
     return json_encode($response["success"]); 

    } else { 
     return "Error: <br>" . $con->error; 
    } 
} 
0

一對夫婦的事情,才能去做的習慣,因爲你是一個初學者:

  • 不要在PHP中使用mysql -functions。改爲使用mysqli(它甚至支持object-orientet表示法!)
  • 您設置INSERT -statement的方式使您的vornable變爲SQL Injection attacks。改爲使用"prepared statement"
  • 要從PHP腳本中「返回」數據(即將其直接發送到瀏覽器),您需要使用echo而不是return
  • 您的代碼中有以下行:json_encode($response),其中$response是一個空數組。這條線不會做任何事情。 json_encode()函數返回一個字符串,其中包含您提供的任何JSON表示。它不會改變它!
  • 我從您的示例中的URL中刪除了API密鑰,因爲公開共享密鑰並不是一個好主意,並且可能導致Valve禁止您的密鑰(例如,如果惡意人員使用它將請求發送到API )。

現在爲您實際的問題:

foreach ($json->playerstats->stats as $stat) { 
    $stats[$stat["name"]] = $stat["value"]; 
    $total_kills = $stats["total_kills"]; 
    $total_deaths = $stats["total_deaths"]; 

我想可能有一些混亂,實際上是由循環中重複一下這個代碼的一部分。它是而不是只是第一行,它是整個機構(由{}包圍)。

問題是,你只會從JSON中獲得第一個條目到$stats -array,這將是total_kills。但是你想所有的人,所以你的循環應該比單獨的這部分運行:

foreach ($content['playerstats']['stats'] as $stat) { 
    $stats[$stat["name"]] = $stat["value"]; 
} 
// Continue as you did... 

那麼這將會從您的要求爲您所期望的格式,使整個數據,所以$stats第二接入將正常工作。

+0

不幸的是,沒有上傳到數據庫,檢查編輯後的新代碼 –

+0

在你的新代碼中,變量'$ total_kills'和'$ total_deaths'永遠不會被分配。如果你有任何錯誤,請包括這些。 –