首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Php将嵌套的JSON插入到mySQL中

使用Php将嵌套的JSON插入到mySQL中
EN

Stack Overflow用户
提问于 2018-07-22 00:28:46
回答 1查看 277关注 0票数 1

我正在尝试将从tmdb API接收的嵌套JSON数据插入到我的mySQL数据库中。

我已经知道如何插入嵌套的JSON,但是由于我需要创建的新记录将有许多对多个关系(电影和电影类型),我假设我必须插入多个行,其中包含具有不同电影类型的相同数据。

我一直在尝试使用另一个foreach循环来处理电影类型,但没有成功。如果能帮上忙我会很感激的。

代码语言:javascript
复制
<?php

$api = "https://api.themoviedb.org/3/movie/popular?api_key=<<api-key>>&language=en-US&page=1";
$jsondata = file_get_contents($api);
//now you have result as associative array
$data = json_decode($jsondata, true);
$array_data = $data['results'];
$array_genre= $data['results']['genre'];//

include "indexmoviedb.php";
$stmt=$db->prepare("INSERT INTO movie VALUES(:title,:poster_path,:backdrop_path,:rating,:overview,:genre)");

foreach($array_data as $row){
foreach ($array_genre as $genrerow) {// I'm assuming I have to do something like this

$stmt->bindParam(":title",$row['title'] );
$stmt->bindParam(":poster_path",$row['poster_path'] );
$stmt->bindParam(":backdrop_path",$row['backdrop_path'] );
$stmt->bindParam(":rating",$row['vote_average'] );
$stmt->bindParam(":overview",$row['overview'] );
$stmt->bindParam(":genre",$row['genres_ids'][] );// what goes in here?
$stmt->execute();
}
}

 ?>

这是我试图插入的json文件

代码语言:javascript
复制
{
  "results": [{
    "id": 351286,
    "vote_average": 6.6,
    "title": "Jurassic World: Fallen Kingdom",
    "popularity": 228.669,
    "poster_path": "/c9XxwwhPHdaImA2f1WEfEsbhaFB.jpg",
    "genre_ids": [
      28,
      12,
      878
    ],
    "backdrop_path": "/gBmrsugfWpiXRh13Vo3j0WW55qD.jpg"
  }]
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-22 02:28:15

首先,你的台词是:

代码语言:javascript
复制
$array_genre= $data['results']['genre'];//

没有按预期工作,因为这个键不存在。您可以再次使用它

代码语言:javascript
复制
foreach ($array_genre as $genrerow) { //...

相反,您可能想要:

代码语言:javascript
复制
foreach ($row['genre_ids'] as $genre_id) {

    // all the other bindings
    $stmt->bindParam(":genre",$genre_id )
}

假设您想为每个流派插入一行。否则你的数据库模式需要更多的解释...这可能意味着一个新的问题。

foreach($row['genre_ids'] ...遍历特定行的genre_ids,json_decode为您将其转换为一个数组。

但是,我假设您的数据库方案可以改进。将一行转换为多行通常不是一个好主意,除非您有处理它的方法。通常的方法是:特殊的数据库字段(数组、json)或将电影链接到流派的连接表(仅包含genre_id和movie_id等)。-两者都解决了规范化问题,在这一点上,这可能是一个小麻烦,但可能会很快变得更烦人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51458059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档