質問編集履歴
6
$nameと$citycodeで分けて実行
test
CHANGED
File without changes
|
test
CHANGED
@@ -133,3 +133,17 @@
|
|
133
133
|

|
134
134
|

|
135
135
|
|
136
|
+
|
137
|
+
5,
|
138
|
+
4,の追記の結果からINSERT文の階層を怪しんだため、
|
139
|
+
```
|
140
|
+
$sql = "INSERT INTO city(`name`) VALUES ($name)";
|
141
|
+
$sql = "INSERT INTO city(`citycode`) VALUES ($citycode)";
|
142
|
+
```
|
143
|
+
というように$nameと$citycodeで分けて実行してみたところ、citycodeのみ実行できました。
|
144
|
+
しかし、nameカラムが入らずで止まっています。
|
145
|
+

|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
|
5
ターミナルコマンドでINSERT実行
test
CHANGED
File without changes
|
test
CHANGED
@@ -122,3 +122,14 @@
|
|
122
122
|
$sql = "INSERT INTO city(`name`,`citycode`) VALUES (`$name`, `$citycode`)";
|
123
123
|
```
|
124
124
|
やはり追記2,と同じここなのかと行き着くのですが、「INSERT INTO」のスペルや文字の大小、スペースも同じ、()内も「(`name`,`citycode`)」「 (`$name`, `$citycode`)」とバッククォートで囲うなど、他に考えられることが見つかりませんでした。
|
125
|
+
|
126
|
+
|
127
|
+
4,
|
128
|
+
返信でApacheのエラーログを見るようにとご指摘いただき、
|
129
|
+
apatcheの階層でMySQLに入りINSERTコマンドを実行しました。
|
130
|
+
特にエラーが返ってくることはなく実行できたのですが、テーブルに何も入りません。
|
131
|
+
ただ、ターミナルコマンドであれば動くのでDB側に要因はないということまでわかりました。
|
132
|
+
|
133
|
+

|
134
|
+

|
135
|
+
|
4
追記-2
test
CHANGED
File without changes
|
test
CHANGED
@@ -106,3 +106,19 @@
|
|
106
106
|
$sql = "INSERT INTO city(`name`,`citycode`) VALUES (`$name`, `$citycode`)";
|
107
107
|
```
|
108
108
|
の書き方が何かおかしい、またはsequel pro(DB)のテーブル構造の設定がおかしい?(しかし、テーブルを作成してから特に変更はしていない)まで推察できた。
|
109
|
+
|
110
|
+
|
111
|
+
|
112
|
+
3,
|
113
|
+
Sequel pro 内のクエリでforeach以下を実行してみました。
|
114
|
+

|
115
|
+
すると、各行ごとに以下のエラーが返ってきました。
|
116
|
+
```
|
117
|
+
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ・・・
|
118
|
+
```
|
119
|
+
調べてみるとSQLの文法に誤りがあるということでした。
|
120
|
+
ここでSQL文を使う箇所は
|
121
|
+
```
|
122
|
+
$sql = "INSERT INTO city(`name`,`citycode`) VALUES (`$name`, `$citycode`)";
|
123
|
+
```
|
124
|
+
やはり追記2,と同じここなのかと行き着くのですが、「INSERT INTO」のスペルや文字の大小、スペースも同じ、()内も「(`name`,`citycode`)」「 (`$name`, `$citycode`)」とバッククォートで囲うなど、他に考えられることが見つかりませんでした。
|
3
タグの追加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -73,3 +73,36 @@
|
|
73
73
|
|
74
74
|
|
75
75
|
どなたかご教授、よろしくお願いいたします。
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
### 追記
|
81
|
+
1,
|
82
|
+
```
|
83
|
+
foreach($value as $city["city"] => $cities){ //sample.jsonで"01"へ
|
84
|
+
$name = $cities["city"];//"01~" の"city"以下"name": "city"を代入
|
85
|
+
$citycode = $cities["citycode"];//"01" "city"以下: "citycode"を代入
|
86
|
+
|
87
|
+
$sql = "INSERT INTO city(`name`,`citycode`) VALUES ('$name', '$citycode')";
|
88
|
+
//$name $citycodeをDBのcityテーブル内のカラムname, citycodeへインサート
|
89
|
+
};
|
90
|
+
```
|
91
|
+
のforeachのkeyとなる$city["city"]と$nameに入れた$cities["city"]が判別しづらいことが原因と思い、
|
92
|
+
```
|
93
|
+
foreach($value["city"] as $value2 => $city_info){ //sample.jsonで"01"へ
|
94
|
+
$name = $city_info["city"];
|
95
|
+
$citycode = $city_info["citycode"];
|
96
|
+
|
97
|
+
$sql = "INSERT INTO city(`name`,`citycode`) VALUES (`$name`, `$citycode`)";
|
98
|
+
//$name $citycodeをDBのcityテーブル内のカラムname, citycodeへインサート
|
99
|
+
```
|
100
|
+
$value2 と$city_info["city"]に書き換えました。
|
101
|
+
|
102
|
+
|
103
|
+
2,
|
104
|
+
1,を行いvar_dumpを行ったところ、$stmt->execute()まで処理がブラウザに出たので、途中にあるINSERT INTO city~ の部分も間違いなく動いている。となると、
|
105
|
+
```
|
106
|
+
$sql = "INSERT INTO city(`name`,`citycode`) VALUES (`$name`, `$citycode`)";
|
107
|
+
```
|
108
|
+
の書き方が何かおかしい、またはsequel pro(DB)のテーブル構造の設定がおかしい?(しかし、テーブルを作成してから特に変更はしていない)まで推察できた。
|
1
コードの追記とエラーの詳細説明
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,14 +1,59 @@
|
|
1
1
|
|
2
2
|
|
3
3
|
### 前提・実現したいこと
|
4
|
-
PHPコードを用いて、sample. jsonにあるcitycode,city(下画像赤枠)をcityテーブルのカラムcitycode,cityへそれぞれインサートで入れたい
|
4
|
+
PHPコードを用いて、sample. jsonにあるcitycode,city(下画像赤枠)をcityテーブルのカラムcitycode,cityへそれぞれインサートで入れたい。しかし、必要コードを書いたのちDB側cityテーブルで「データベースを再読み込み」を実行してもカラムに何も表示されない。
|
5
5
|
|
6
6
|

|
7
7
|

|
8
8
|
|
9
9
|
|
10
|
-
下
|
10
|
+
下は、矢印部分がcityレコードへのインサートが関わるコード
|
11
|
+
```
|
12
|
+
// JSONを持ってくる
|
13
|
+
$filename = "sample.json";
|
14
|
+
$file = file_get_contents($filename);
|
15
|
+
$prevention = mb_convert_encoding($file, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
|
16
|
+
$json = json_decode($prevention, true);
|
17
|
+
|
18
|
+
//PHPからMySQLへ接続
|
19
|
+
//DB接続
|
20
|
+
$user = 'user';
|
21
|
+
$pass = 'pass';
|
22
|
+
$db = 'mzn';
|
23
|
+
$host = 'mzn_db';
|
24
|
+
|
25
|
+
try {
|
26
|
+
// MySQLへの接続
|
27
|
+
$dbh = new PDO(sprintf('mysql:dbname=%s;host=%s;charset=utf8', $db, $host), $user, $pass);
|
28
|
+
|
29
|
+
// 3. 地方ごとの県を表示
|
30
|
+
foreach($json as $key => $val){ //sample.jsonで"01"へ
|
31
|
+
foreach($json[0] as $val => $value){ //sample.jsonで"01"の下へ
|
32
|
+
|
33
|
+
// ↓cityテーブルへのINSERTが関わるコード↓
|
34
|
+
foreach($value as $city["city"] => $cities){ //sample.jsonで"01"へ
|
35
|
+
$name = $cities["city"];//"01~" の"city"以下"name": "city"を代入
|
11
|
-
|
36
|
+
$citycode = $cities["citycode"];//"01" "city"以下: "citycode"を代入
|
37
|
+
|
38
|
+
$sql = "INSERT INTO city(`name`,`citycode`) VALUES ('$name', '$citycode')";
|
39
|
+
//$name $citycodeをDBのcityテーブル内のカラムname, citycodeへインサート
|
40
|
+
|
41
|
+
$stmt = $dbh->prepare($sql);
|
42
|
+
$stmt->execute();
|
43
|
+
// ↑cityテーブルへのINSERTが関わるコード ↑
|
44
|
+
|
45
|
+
};
|
46
|
+
};
|
47
|
+
};
|
48
|
+
|
49
|
+
} catch (PDOException $e) {
|
50
|
+
print "エラー:" . $e->getMessage() . "<br/gt;";
|
51
|
+
$dbh = null;
|
52
|
+
};
|
53
|
+
|
54
|
+
```
|
55
|
+
|
56
|
+
|
12
57
|
|
13
58
|
|
14
59
|
### 試したこと
|