前提・実現したいこと
下のようなコードで、JSONデータをINSERTでDB内のlarge_areaテーブルに入れ、そこからSELECTを用いて入れたlarge_areaテーブルのデータを取り出すという実装をしている。
php
1// JSONを持ってくる 2$filename = "sample.json"; 3$file = file_get_contents($filename); 4$prevention = mb_convert_encoding($file, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 5$json = json_decode($prevention, true); 6 7//PHPからMySQLへ接続 8//DB接続 9$user = 'user'; 10$pass = 'pass'; 11$db = 'mzn'; 12$host = 'mzn_db'; 13 14try { 15 // MySQLへの接続 16 $dbh = new PDO(sprintf('mysql:dbname=%s;host=%s;charset=utf8', $db, $host), $user, $pass); 17} catch (PDOException $e) { // PDOExceptionをキャッチ 18 print "エラー:" . $e->getMessage() . "<br/gt;"; // PDO:execute(実行) prepareでパラメータ化した部分に具体的な値を結びつける(バインド) 19 20 // DB接続を解除 21 $dbh = null; 22} 23 24// 3. 地方ごとの県を表示 25foreach($json as $key => $val){ 26 foreach($json[0] as $val => $value){ 27 $name = $value["name"]; 28 $id = $value["id"]; 29 $sql = "INSERT INTO large_area(prefeture_name, prefecture_id) VALUES ($name,$id)"; 30 $stmt = $dbh->prepare($sql); 31 32 $records = $dbh->query("SELECT * FROM large_area"); 33 while($record = $records->fetch()){ 34 echo "<pre>"; 35 echo $record["prefecture_name"] . " : " . $record["name"]; 36 } 37}; 38};
発生している問題・エラーメッセージ
INSERTでDB内のlarge_areaテーブルに入れる過程がうまくいかない。
本来であれば、下の画像のprefeture_nameに都道府県、prefecture_idにidが並ぶはずであるが、入らない。(「test1」「test2」等の既に入っているものはSELECT部分の稼働テスト時に直接手入力で入れたもの)
考えられること
var_dumpを各所に差し込んでみたところ、
$sql = "INSERT INTO large_area(prefeture_name, prefecture_id) VALUES ($name,$id)";
の後に差し込むとブラウザ上で
string(75) "INSERT INTO large_area(prefeture_name, prefecture_id) VALUES (北海道,01)" test1 : test1 test2 : test2 : : : : : : :
となり、$name,$idまではJSONコードから処理が流れてきていることは分かり、その後の
$stmt = $dbh->prepare($sql);
の後に差し込むとブラウザ上で
object(PDOStatement)#2 (1) { ["queryString"]=> string(75) "INSERT INTO large_area(prefeture_name, prefecture_id) VALUES (北海道,01)" } test1 : test1 test2 : test2 : : : : : : :
となったので
$sql = "INSERT INTO large_area(prefeture_name, prefecture_id) VALUES ($name,$id)"; $stmt = $dbh->prepare($sql);
の何かに原因があると考えられる。
どなたかご教授いただけないでしょうか?よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。