Привет всем и спасибо за ваше терпение,Обновления MySQL таблицы из JSON с помощью PHP
Я пытаюсь написать хроны для обновления курса валют в нашей базе данных MySQL. Данные JSON, которые я получаю, выглядят так:
{
"disclaimer": "Exchange rates are provided for informational purposes only, and do not constitute financial advice of any kind. Although every attempt is made to ensure quality, NO guarantees are given whatsoever of accuracy, validity, availability, or fitness for any purpose - please use at your own risk. All usage is subject to your acceptance of the Terms and Conditions of Service, available at: ",
"license": "Data sourced from various providers with public-facing APIs; copyright may apply; resale is prohibited; no warranties given of any kind. Bitcoin data provided by. All usage is subject to your acceptance of the License Agreement available at:",
"timestamp": 1427914861,
"base": "CAD",
"rates": {
"AED": 2.908081,
"AFN": 45.794285,
"ALL": 103.179929,
"AMD": 373.363817,
"ANG": 1.416823,
"AOA": 85.603315,
"ARS": 6.986543,
"AUD": 1.041048,
"AWG": 1.42113,
"AZN": 0.829254,
"BAM": 1.437242,
"BBD": 1.583432,
"BDT": 61.66817,
"BGN": 1.437963,
"BHD": 0.298493,
"BIF": 1246.009421,
"BMD": 0.791716,
"BND": 1.080918,
"BOB": 5.468926,
"BRL": 2.518805,
"BSD": 0.791716,
"BTC": 0.0032649636,
"BTN": 49.501403,
"BWP": 7.855039,
"BYR": 11644.270337,
"BZD": 1.581753,
"CAD": 1,
"CDF": 733.551108,
"CHF": 0.76573,
"CLF": 0.019475,
"CLP": 490.205281,
"CNY": 4.895048,
"COP": 2038.824734,
"CRC": 422.26163,
"CUC": 0.791716,
"CUP": 0.791726,
"CVE": 80.458447,
"CZK": 20.263721,
"DJF": 140.548137,
"DKK": 5.492318,
"DOP": 35.391341,
"DZD": 77.203651
}
}
Поскольку таблица уже существует, все, что я хочу сделать, это обновить валюты, которые мы имеем в таблице, не все валюты, что файл JSON дает мне. У нас только 7 валют в нашей таблице (она может меняться в зависимости от того, принимаем ли мы больше валют или меньше). Это код, который я придумал;
<?php
define("_SITE_SECURED_FILES_",realpath(dirname(__FILE__)."/../../../../")."\Secured_Files");
// Database Credentials
require_once(_SITE_SECURED_FILES_."\Database\credentials.mysql.php");
// Open Exchange Rates Credentials
require_once(_SITE_SECURED_FILES_."\Open_Exchange_Rates\credentials.openexchangerates.php");
// Requested file
// Could also be e.g. 'currencies.json' or 'historical/2011-01-01.json'
$file = 'latest.json';
$base_currency = 'CAD';
// Open CURL session
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://openexchangerates_org/api/{$file}?app_id={$appId}&base={$base_currency}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Get the data:
$json = curl_exec($ch);
curl_close($ch);
// Decode JSON response:
$exchangeRates = json_decode($json);
foreach($exchangeRates['rates'] as $key => $value) {
if($value) {
//how to use json array to insert data in Database
mysqli_query($mysql,"UPDATE currencies SET dblRateCAD = '".$value."' WHERE strCode = '".$exchangeRates['rates']."' LIMIT 1");
}
}
?>
Прямо сейчас, это не работает. Я получаю
PHP Fatal error: Cannot use object of type stdClass as array on line 29: foreach($exchangeRates['rates'] as $key => $value) {
Поскольку 'json_decode' дает вам объект не является массивом. http://php.net/manual/en/function.json-decode.php – developerwjk
Получаемый вами JSON содержит обменные курсы как свойства объекта, а не как массив. Поскольку объект 'stdClass' не включает итератор, вам нужно извлечь скорость, прочитав каждое требуемое свойство. Для семи это не должно быть проблемой. –