如何将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¤cies=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
相关产品推荐
相关产品推荐

