Php 从Youtube api向Mysql插入数据

Php 从Youtube api向Mysql插入数据,php,mysql,api,youtube,Php,Mysql,Api,Youtube,我试图弄清楚如何使用curl将调用中的所有视频信息行插入Youtube api。我不确定我做错了什么,但不管我怎么做,我只能插入一行。 下面是一个简单的例子,我尝试了一个随机播放列表 $con=mysqli_connect("localhost","...","...","..."); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $url =

我试图弄清楚如何使用curl将调用中的所有视频信息行插入Youtube api。我不确定我做错了什么,但不管我怎么做,我只能插入一行。 下面是一个简单的例子,我尝试了一个随机播放列表

$con=mysqli_connect("localhost","...","...","...");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2C+id%2C+status&playlistId=PLU12uITxBEPHfZZRTIk96NduwU_8hT-Yo&maxResults=10&key={API KEY}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0'
));

curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);

$json_response = curl_exec($ch);
curl_close ($ch);

$result = json_decode($json_response, true);

foreach ($result['items'] as $page_info) {

$video_id = $page_info['snippet']['resourceId']['videoId'];
$title = $page_info['snippet']['title'];

mysqli_query($con, "INSERT INTO links (video_id, title) VALUES ('$video_id', '$title')");  

}
我还尝试创建一个包含所有内容的数组,并尝试将其转储到sql。我想我仍然会得到相同的1行结果,但我还是尝试了

$values = array();
foreach ($result['items'] as $page_info) {

$video_id = $page_info['snippet']['resourceId']['videoId'];
$title = $page_info['snippet']['title'];

$values[] = "('$video_id', '$title')";
}
$query_values = implode(',', $values);
mysqli_query($con, "INSERT INTO links (video_id, title) VALUES $query_values");
谁能帮我找出我做错了什么?谢谢

更新:
原来我的桌子有问题,我想可能是坏了什么的。我创建了一个新表,它解决了我的问题

对于任何可能看到这一点并希望/试图学习如何使用Youtube api并将数据插入您自己的数据库的人,第一个框中的上述代码目前运行良好

只要改变一下:

$con=mysqli_connect("localhost","...","...","...");
到您自己的数据库设置。例:

$con=mysqli_connect("localhost","Username","Password","Database");
并添加要插入的值,如$video\u id、$title,然后更新查询以使用新值。
例如:

$video_id = $page_info['snippet']['resourceId']['videoId'];
$title = $page_info['snippet']['title'];
$description = $page_info['snippet']['description'];
mysqli_query($con, "INSERT INTO links (video_id, title, description) VALUES ('$video_id', '$title', '$description')");  
您还需要使用key=,将API密钥添加到URL中。
例如:

$url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2C+id%2C+status&playlistId=PLU12uITxBEPHfZZRTIk96NduwU_8hT-Yo&maxResults=10&key=123456789123456789";
您可以通过在此处注册,然后单击library并选择Youtube数据api来获取免费api密钥


要了解如何构建URL以便可以查询所需的任何数据,这应该是一个很好的起点

您还需要在foreach中循环mysql查询。若您对其进行内爆转换,只需根据传递给内爆的第一个参数将其从数组转换为字符串即可。相反,你这样做

    $values = array();
    foreach ($result['items'] as $page_info) {

    $video_id = $page_info['snippet']['resourceId']['videoId'];
    $title = $page_info['snippet']['title'];
    mysqli_query($con, "INSERT INTO links (video_id, title) VALUES ('$video_id', '$title');
}

您可以发布var_dump($result['items'])的输出吗?这是打印。我也把它贴在了下面。在第一个示例中,我确实在循环中包含sql查询,但它只插入第一行。我可以在vardump中看到所有结果,但我只插入了第一行,这就是为什么我感到困惑的原因。这是不可能的。请再次检查您的mysqli\u查询。因为foreach迭代$result['items']。如果只插入一条记录,那么可能只有一条记录;如果有帮助,请使用我的第一个示例代码。我只得到要插入的第一行,没有错误。请通过编码json_encode($result['times')共享json格式;我让它工作了。我创建了一个新的示例表,它可以正常工作。我不明白另一个表有什么问题,因为我没有唯一的字段或任何东西,它与新表相同。无论如何,谢谢你试图帮助我。