PHP插入JSON数据到MySQL失败,请求技术协助
解决JSON数据插入MySQL数据库失败的问题
看起来你在把OPSkins API返回的JSON数据插入MySQL时遇到了问题,我帮你梳理下问题并给出完整的解决方案。
首先先明确你的目标JSON结构:
{ "status": 1, "response": { "Aviator Goggles": { "price": 1009, "quantity": 269 }, "Aviator Sunglasses": { "price": 460, "quantity": 187 }, "BIKER CRATE": { "price": 29, "quantity": 3569 } }, "time": 1524852778 }
核心需要插入的是response节点下的每一条商品数据,包含商品名称、价格、库存三个字段。
常见问题排查
- 你提供的PHP代码不完整,可能没有正确完成JSON的获取、解析或遍历
- 未处理API请求失败的情况(比如网络问题、API返回错误)
- 未使用预处理语句,存在SQL注入风险同时可能导致插入失败
- 数据库连接配置错误或表结构不匹配
完整解决方案代码
下面是经过完善的PHP代码,包含完整的JSON获取、解析、数据库插入逻辑,同时添加了错误处理:
<?php // 1. 配置数据库连接信息 $dbHost = 'localhost'; $dbUser = 'your_username'; $dbPass = 'your_password'; $dbName = 'your_database'; // 2. 获取并解析JSON数据 $jsonUrl = "https://api.opskins.com/IPricing/GetAllLowestListPrices/v1/?appid=578080&format=json_pretty"; $jsonData = file_get_contents($jsonUrl); // 检查是否成功获取数据 if (!$jsonData) { die("无法获取API数据,请检查网络连接或API地址"); } // 解析JSON为关联数组 $decodedData = json_decode($jsonData, true); // 检查JSON解析是否成功 if (json_last_error() !== JSON_ERROR_NONE) { die("JSON解析失败:" . json_last_error_msg()); } // 检查API返回状态是否正常 if ($decodedData['status'] !== 1) { die("API返回错误,状态码:" . $decodedData['status']); } // 3. 建立数据库连接 $conn = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName); // 检查数据库连接 if (!$conn) { die("数据库连接失败:" . mysqli_connect_error()); } // 4. 遍历商品数据并插入数据库 // 建议先确保你的数据库表结构包含:item_name(文本类型)、price(整数/小数)、quantity(整数) $insertSql = "INSERT INTO your_table_name (item_name, price, quantity) VALUES (?, ?, ?)"; // 使用预处理语句防止SQL注入并提高插入效率 $stmt = mysqli_prepare($conn, $insertSql); if (!$stmt) { die("预处理语句创建失败:" . mysqli_error($conn)); } // 绑定参数(s=字符串,i=整数) mysqli_stmt_bind_param($stmt, "sii", $itemName, $price, $quantity); // 遍历response中的每个商品 foreach ($decodedData['response'] as $itemName => $itemDetails) { $price = $itemDetails['price']; $quantity = $itemDetails['quantity']; // 执行插入 if (!mysqli_stmt_execute($stmt)) { echo "插入商品 {$itemName} 失败:" . mysqli_stmt_error($stmt) . "<br>"; } else { echo "商品 {$itemName} 插入成功<br>"; } } // 关闭资源 mysqli_stmt_close($stmt); mysqli_close($conn); ?>
额外注意事项
- 数据库表结构:确保你的表(
your_table_name)存在对应的字段,比如:CREATE TABLE IF NOT EXISTS items ( id INT AUTO_INCREMENT PRIMARY KEY, item_name VARCHAR(255) NOT NULL, price INT NOT NULL, quantity INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - API请求限制:OPSkins API可能有请求频率限制,频繁请求可能被封禁,建议添加请求间隔或缓存机制
- 错误日志:生产环境中不要直接输出错误信息,建议写入错误日志文件
内容的提问来源于stack exchange,提问作者Roman Vetrov
相关产品推荐
相关产品推荐

