Я извлекаю данные из API, который выводит данные JSON, которые содержат статистику игроков.У меня есть отдельный стол для каждого навыка в игре, в которую я играю.Всего 27 умений, так что всего будет 28 таблиц, включая таблицу пользователей.Во-первых, есть две проблемы: один из операторов вставки пытается дважды поместить одну и ту же запись и создает ошибку повторяющейся записи, а вторая проблема - некоторые операторы вставки ничего не помещают в свои соответствующие таблицы.Есть еще одна проблема, которая заключается в том, что в базу данных помещается только одна информация о пользователях.Пример: у меня в таблице пользователей 3 пользователя: Боб, Джейн, Пол, в которые вносятся только данные о навыках Бобса. Таким образом, по сути, вставляется только одна запись, когда в таблице пользователей на данный момент находится примерно 150 имен.Ох, и я забыл упомянуть, что я вставляю идентификатор пользователя из таблицы пользователей в таблицу навыков.Я включил массив $ highscores на случай, если кому-то понадобится
Сначала я подумал, что это тот факт, что я использовал переменную $query
несколько раз, поэтому я сделал их уникальными, например: $query1, $query2, $query3 etc
,проблемы сохраняютсяЯ проверил все орфографии, где if проверяет, равна ли переменная навыку, и все орфографические совпадения.Весь код идентичен.
Array
(
[skillvalues] => Array
(
[0] => Array
(
[level] => 99
[xp] => 648475179
[rank] => 41501
[id] => 3
)
.
.
.
repeat for the other 26 skills
)
)
//grab users and the users id out of the users table
$query = $conn->query("SELECT user_id, name FROM users ORDER BY user_id
ASC");
ini_set('max_execution_time', 1600);
While($row = $query->fetch(PDO::FETCH_ASSOC)){
$name = $row["name"];
$user_id = $row["user_id"];
//to compensate for spaces because otherwise file_get_contents will fail
$name = str_replace(' ', '%20', $name);
//api where the data is coming from which outputs as json
$highscores = file_get_contents("https://apps.runescape.com/runemetrics/profile/profile?user=" .$name);
$highscores = json_decode($highscores, true);
$offset = 8;
//only grab the skills data
$highscores = array_slice($highscores, $offset);
//put the space back
$name = str_replace('%20', ' ', $name);
//assigns skill name to skill id
$skills_arr = array('0' => "attack",'1' => "defence",'2' => "strength",'3' => "hitpoints",'4' => "ranged",'5' => "prayer",'6' => "magic",'7' => "cooking",'8' => "woodcutting",'9' => "fletching",'10' => "fishing",'11' => "firemaking",'12' => "crafting",'13' => "smithing",'14' => "mining",'15' => "herblore",'16' => "agility",'17' => "thieving",'18' => "slayer",'19' => "farming",'20' => "runecrafting",'21' => "hunter",'22' => "construction",'23' => "summoning",'24' => "dungeoneering",'25' => "divination",'26' => "invention");
//to catch if file_get_contents ends up grabing a profile the player has thier data set to private
if(!empty($highscores)){
foreach($highscores['skillvalues'] as $skills){
$skill = $skills_arr[$skills['id']];
$xp = $skills['xp'];
$rank = $skills['rank'];
$level = $skills['level'];
$profile = "1";
//to catch if file_get_contents ends up grabbing a profile where the player has no rank in any skill
if(!empty($rank)){
//assign the values to the correct skill
if($skill == "attack"){
$skill = $skill;
$rank = $rank;
$level = $level;
$xp = $xp;
$query = $conn->prepare("INSERT INTO $skill VALUES(?, ?, ?, ?, ?)");
$query->execute(array($user_id, $rank, $level, $xp, $profile));
}
.
.
.
repeat the exact same code for the other 26 skills
}
}//END WHILE LOOP