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

如何将Yelp API返回的JSON数据完整插入MySQL数据库

问题分析与修复方案

核心问题梳理

  • 仅固定获取第一条评论:所有数据变量都取了reviews[0],完全没处理后续评论条目
  • 用户字段路径错误:Yelp API中每条评论的用户信息存在user字段下,而非users[1],键名和索引都写错了
  • 循环对象错误:遍历的是整个$response对象,而非评论数组$response['reviews'],循环逻辑混乱
  • 变量未动态更新:所有数据变量定义在循环外部,导致每次插入的都是第一条评论的重复数据
  • 存在SQL注入风险:直接将变量拼入SQL语句,既不安全也可能因特殊字符导致插入失败

修正后的代码

$response = json_decode($data, true);

// 建立数据库连接并增加错误检测
$con = mysqli_connect('localhost', 'root', '', 'reviews');
if (!$con) {
    die('数据库连接失败: ' . mysqli_connect_error());
}

// 检查评论数组是否有效
if (isset($response['reviews']) && is_array($response['reviews'])) {
    // 准备预处理语句,防范SQL注入
    $stmt = mysqli_prepare($con, "INSERT INTO yelp (Text, Rating, ProfileURL, Name) VALUES (?, ?, ?, ?)");
    
    // 绑定参数类型:s=字符串、i=整数
    mysqli_stmt_bind_param($stmt, "siss", $text, $rating, $profileUrl, $userName);
    
    // 遍历每条评论
    foreach ($response['reviews'] as $review) {
        // 从当前评论中提取数据,增加容错判断
        $text = isset($review['text']) ? $review['text'] : "";
        $rating = isset($review['rating']) ? $review['rating'] : 0;
        $profileUrl = isset($review['user']['profile_url']) ? $review['user']['profile_url'] : "";
        $userName = isset($review['user']['name']) ? $review['user']['name'] : "";
        
        // 执行插入操作
        mysqli_stmt_execute($stmt);
    }
    
    // 关闭预处理语句与数据库连接
    mysqli_stmt_close($stmt);
    echo "数据插入成功";
} else {
    echo "未获取到有效评论数据";
}

mysqli_close($con);

关键改动说明

  1. 遍历正确对象:改为遍历$response['reviews']数组,确保每条评论都被处理
  2. 修正用户字段路径:将users[1]改为user,匹配Yelp API的实际返回结构
  3. 变量动态更新:将数据变量赋值放入循环内部,每次迭代获取当前评论的对应数据
  4. 使用预处理语句:通过参数化查询避免SQL注入,同时解决特殊字符导致的插入失败问题
  5. 增加错误检测:添加数据库连接、评论数组有效性的判断,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:55:19