You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Metalpriceapi数据存储到本地MySQL数据库?

将Metalpriceapi数据插入MySQL数据库的解决方案

1. 先创建MySQL数据表

首先在本地MySQL中创建用于存储金属价格的表,推荐结构如下:

CREATE TABLE metal_prices (
    id INT AUTO_INCREMENT PRIMARY KEY,
    base_currency VARCHAR(3) NOT NULL,
    metal_code VARCHAR(3) NOT NULL,
    price DECIMAL(18,8) NOT NULL,
    fetched_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY unique_metal_base (base_currency, metal_code, fetched_at) -- 避免同一时间重复插入相同数据
);

该表包含自增主键、基准货币、金属代码、价格、数据获取时间,添加唯一键是为了防止重复存储同一时间点的相同金属价格。

2. 修改PHP代码,添加数据库插入逻辑

在你已有的CURL获取数据代码基础上,补充JSON解析和数据库操作逻辑,这里推荐使用PDO(安全且兼容性强):

<?php
// 1. CURL请求API获取数据
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.metalpriceapi.com/v1/latest?api_key=cb15852705e671c76a4dc1ac9789ed2a&base=USD&currencies=XAU,XAG,EUR',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));

$response = curl_exec($curl);
$curlError = curl_error($curl);
curl_close($curl);

// 检查CURL请求是否成功
if ($curlError) {
    die("CURL请求失败: " . $curlError);
}

// 2. 解析API返回的JSON数据
$data = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON解析失败: " . json_last_error_msg());
}

// 校验API返回是否正常
if (!isset($data['success']) || $data['success'] !== true) {
    die("API返回错误: " . ($data['error']['info'] ?? '未知错误'));
}

// 3. 连接MySQL数据库(替换为你的实际数据库信息)
$dbHost = 'localhost';
$dbName = '你的数据库名称';
$dbUser = '你的数据库用户名';
$dbPass = '你的数据库密码';

try {
    $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 4. 预处理插入语句(防止SQL注入)
    $stmt = $pdo->prepare("INSERT INTO metal_prices (base_currency, metal_code, price) VALUES (:base, :code, :price)");

    // 5. 循环插入每个金属的价格数据
    $baseCurrency = $data['base'];
    foreach ($data['rates'] as $metalCode => $price) {
        $stmt->execute([
            ':base' => $baseCurrency,
            ':code' => $metalCode,
            ':price' => $price
        ]);
    }

    echo "数据插入成功,共插入 " . count($data['rates']) . " 条记录";
} catch(PDOException $e) {
    die("数据库操作失败: " . $e->getMessage());
}
?>

关键说明

  • 数据库信息替换:务必将代码中的数据库主机、名称、用户名、密码替换为你本地MySQL的实际信息。
  • 预处理语句:使用PDO预处理语句能有效避免SQL注入风险,是操作数据库的安全规范。
  • 错误捕获:代码中添加了CURL请求、JSON解析、API返回、数据库操作的错误捕获,方便排查问题。
  • 唯一键约束:表中的unique_metal_base约束可避免同一时间点重复插入相同数据,若需要更频繁更新(比如按小时),可调整约束的字段组合。

内容的提问来源于stack exchange,提问作者jeetu kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:54:56