今phpでAPIを読み取りDBにデータを送信し保存する、ということをやりたいのですが
最後にデータベースに送信するところがうまくいかないです。
変数を使わないやり方であればうまくいくのですが、文法が分かりません。
どうかご教授お願いします。
PHP
1<?php 2 $url="http://localhost/json/API_prd.json"; 3 $json=file_get_contents($url); 4 $arr=json_decode($json,true); 5 echo json_last_error(); 6 echo json_last_error_msg(); 7 echo "<br/>"; 8 if($arr==NULL){ 9 echo "MISS"; 10 return; 11 }else{ 12 $json_count=count($arr[0]["odpt:stationTimetableObject"]); 13 $time=array(); 14 for($i=0;$i<=$json_count-1;++$i){ 15 $station[]=$arr[0]["odpt:station"]; 16 $time[]=$arr[0]["odpt:stationTimetableObject"][$i]["odpt:departureTime"]; 17 $num[]=$arr[0]["odpt:stationTimetableObject"][$i]["odpt:trainNumber"]; 18 } 19 try{ 20 $db = new PDO('mysql:dbname=api;host=localhost;charset=utf8','root','vagrant'); 21 $delete=$db->exec('DELETE FROM API_about'); 22 }catch(PDOException $e){ 23 echo 'DB接続エラー:'.$e->getMessage(); 24 } 25 for($i=0;$i<=$json_count-1;++$i){ 26 $stmt=$db->prepare('INSERT INTO api_about(station_name,station_time,station_number)VALUES(?,?,?)'); 27 $stmt->bindParam('station_name',$station[0],PDO::PARAM_STR); 28 $stmt->bindValue('station_time',$time[$i],PDO::PARAM_STR); 29 $stmt->bindParam('station_number',$num[$i],PDO::PARAM_STR); 30 $stmt->execute(); 31 } 32} 33 34// $catch=$db->exec('INSERT INTO API_about SET station_name="tanaka",station_time="04:00",station_number="450G",id=1'); 35 //$records=$db->query('SELECT DISTINCT*FROM API_about'); 36 /*while($record=$records->fetch()){ 37 print($record['station_name']); 38 }*/ 39?> 40
DBには接続できているので文法だけが問題だと思われます。
追記1
ご指摘がありましたので、API提供者様に迷惑が掛からないよう自分のサーバーに落とし込んだファイルで
プログラムを更新しています。
また$stmt->execute();を
書き加えたところ
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\php\API_prd.php on line 33
と書き加えた部分でエラーが起きているとphp側でエラーメッセージが出てきました。
現在そこを修正中です。
回答3件
あなたの回答
tips
プレビュー