質問編集履歴

6

$nameと$citycodeで分けて実行

2022/02/11 07:47

投稿

Wingmacbook
Wingmacbook

スコア17

test CHANGED
File without changes
test CHANGED
@@ -133,3 +133,17 @@
133
133
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-11/618b61f9-583c-403f-86dc-b260ba4ad581.png)
134
134
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-11/fe92ab6d-728d-489f-8051-ab76d4b04088.png)
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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-11/da3a81f6-7ecb-49d6-b778-2e2cdce0f8d7.png)
146
+
147
+
148
+
149
+

5

ターミナルコマンドでINSERT実行

2022/02/11 07:05

投稿

Wingmacbook
Wingmacbook

スコア17

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-11/618b61f9-583c-403f-86dc-b260ba4ad581.png)
134
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-11/fe92ab6d-728d-489f-8051-ab76d4b04088.png)
135
+

4

追記-2

2022/01/30 07:01

投稿

Wingmacbook
Wingmacbook

スコア17

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
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-30/5cb9ec9b-0125-48ad-8d32-4ca5f866a3a8.png)
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

タグの追加

2022/01/29 03:50

投稿

Wingmacbook
Wingmacbook

スコア17

test CHANGED
File without changes
test CHANGED
File without changes

2

追記

2022/01/24 14:46

投稿

Wingmacbook
Wingmacbook

スコア17

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

コードの追記とエラーの詳細説明

2022/01/22 10:31

投稿

Wingmacbook
Wingmacbook

スコア17

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
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-20/e62ca7cd-5565-4224-9ad8-2fdd4e871869.png)
7
7
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-20/7ad33af3-cac4-4776-9d68-1a1ede583d4a.png)
8
8
 
9
9
 
10
- の画像の赤枠cityレコードへのインサートが関わるコード
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
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-01-20/a599d27a-f941-4415-8132-016a23ddd970.png)
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
  ### 試したこと