前提・実現したいこと
現在YouTube Data APIを使ってJSONを取得し、それを配列に変換後、データベースにインサートするシステムを制作しています。以下は問題の発生しているソースコードを抜粋編集しております。
//APIから情報を取得するfunctionをインクルード include 'vt-getChannel.php'; error_reporting(E_ALL); //YouTubeのユーザーキーを設定 $USER_KEY = "ユーザーキー"; //DBへの接続を行う //DBヘの接続情報が記載されているphpファイルを読み込む require_once('../~ファイルまでのpath~/database.php'); define('DATABASE_NAME',$database_name); define('DATABASE_USER',$database_user); define('DATABASE_PASSWORD',$database_password); define('DATABASE_HOST',$database_host); define('PDO_DSN','mysql:dbname=' . DATABASE_NAME .';host=' . DATABASE_HOST); $pdo = new PDO( PDO_DSN, DATABASE_USER, DATABASE_PASSWORD ); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); //YouTubeチャンネルのIDを指定する。 $vt_channelId = 'UCNSr_pgMH3in2d0RGtcdEEg'; $video_array = getNewVideoList($USER_KEY, $vt_channelId); for($i=0; $i<5; $i++){ $video_thumbnail = $video_array['items'][$i]['snippet']['thumbnails']['medium']['url']; $video_title = $video_array['items'][$i]['snippet']['title']; $video_date = $video_array['items'][$i]['snippet']["publishedAt"]; $video_summary = $video_array['items'][$i]['snippet']["description"]; $video_id = $video_array['items'][$i]['id']["videoId"]; // ここまで変数に値があることを確認しました $smt = $pdo -> prepare("insert into at_video (youtube_channel_id, video_thumbnail, video_title, video_date, video_summary, video_id) values (:youtube_channel_id, :video_thumbnail, :video_title, :video_date, :video_summary, :video_id)"); $smt->bindParam(':youtube_channel_id', $vt_channelId, PDO::PARAM_STR); $smt->bindParam(':video_thumbnail', $video_thumbnail, PDO::PARAM_STR); $smt->bindParam(':video_title', $video_title, PDO::PARAM_STR); $smt->bindParam(':video_date', $video_date, PDO::PARAM_STR); $smt->bindParam(':video_summary', $video_summary, PDO::PARAM_STR); $smt->bindParam(':video_id', $video_id, PDO::PARAM_STR); $smt->execute(); $check=$smt->execute(); if($check){ echo '成功!'; }else{ echo '失敗!'; } var_dump($pdo->errorInfo()); } } function getNewVideoList($USER_KEY, $CHANNEL_ID){ //特定チャンネルの最新の動画IDを取得する $API_BASE_URL_01 = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=".$CHANNEL_ID."&order=date&key=".$USER_KEY; //APIにアクセス、結果を配列にして$arrayに格納 $contents = file_get_contents($API_BASE_URL_01); $arrays= json_decode($contents, true); return $arrays; }
発生している問題・エラーメッセージ
数十件のデータを一度にDBにインサートする際に、for文の中で一部の情報だけインサートされないという問題が発生しました。そのため、ソースコードを切り分け、上記の部分で何かしらの問題が起きているところまでは分かりました。
他のYouTubeチャンネルはこのソースコードで問題なく情報を取得できているのですが、一部のチャンネルだけjsonを取得し、配列に変換、変数への代入も行えているのに、DBにインサートされない状況です。また、$check=$smt->execute();の結果は「失敗」になっており、var_dump($pdo->errorInfo());は00000と空になっています。
誰かわかる方がいらっしゃいましたら、回答をよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー