php - 使用 PHP 从 JSON 更新 MySQL 表

标签 php mysql sql arrays json

大家好,感谢您的耐心等待,

我正在尝试编写一个 cron 作业来更新我们 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($json, true) 并将您的查询修改为 "UPDATE currencies SET dblRateCAD = '".$value."' WHERE strCode = ' ”。 $键。”'

// Decode JSON response:
$exchangeRates = json_decode($json, true);

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 = '". $key ."' LIMIT 1");
    }
}

关于php - 使用 PHP 从 JSON 更新 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29401255/

相关文章:

mysql - 我应该在 MySQL 中使用大 INT 还是常规 INT 来存储时间戳?

mysql - Multiple Union 未抓取 All (*) Data Column 时如何获取行号?

mysql - ActiveRecord 自动增量值

sql - 选择 postgreSQL 中可用的最准确的数据?

mysql - 选择具有最大字段数的记录

java - SELECT 中的多个值

php - php 可以有混合类型提示吗?

PHP - preg_replace 反向引用

php - 如何使用 PHP 记录到 Windows 事件日志?

php - 从 print_r 输出重新创建原始 PHP 数组