2016-05-05 73 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'永远不会被分配。如果你有任何错误,请包括这些。 –