質問するログイン新規登録

質問編集履歴

10

書式の改善

2018/02/21 09:15

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,8 @@
5
5
  DBからCSVファイルを出力 → ユーザがそのCSVファイルをエクセルで編集 → DBにCSVファイルを入力
6
6
 
7
7
  の ”DBにCSVファイルを入力” 部分の質問になります。
8
+ このプログラムはartisanコマンドで呼び出され実行されます。
8
- 現在csvを読み込んで配列に格納し、その配列をもとにDBのデータを更新するプログラムを書いています。
9
+ csvを読み込んで配列に格納し、その配列をもとにDBのデータを更新するプログラムす。
9
10
 
10
11
  ###発生している問題・エラーメッセージ
11
12
 

9

書式の改善

2018/02/21 09:15

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
@@ -1,1 +1,1 @@
1
- 文字コードの変換について(PHP)
1
+ 文字コードsjisの変換について
body CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  DBからCSVファイルを出力 → ユーザがそのCSVファイルをエクセルで編集 → DBにCSVファイルを入力
6
6
 
7
+ の ”DBにCSVファイルを入力” 部分の質問になります。
7
8
  現在csvを読み込んで配列に格納し、その配列をもとにDBのデータを更新するプログラムを書いています。
8
9
 
9
10
  ###発生している問題・エラーメッセージ

8

誤字の修正

2018/02/21 09:09

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -17,24 +17,32 @@
17
17
  該当箇所をvar_dumpで見ると下記のようになっており、
18
18
 
19
19
  ```php
20
+ array(11) {
21
+  [0]=>
20
- string(13) "001r357820094"
22
+  string(13) "001r357820094"
23
+  [1]=>
21
- string(3) "001"
24
+  string(3) "001"
25
+  [2]=>
22
- string(57) "あいう機構",00-1234-5678""
26
+  string(57) "あいう機構",00-1234-5678""
23
27
  ```
24
28
 
25
- csvの区切り文字がうまく読まれません。
29
+ csvの区切り文字がうまく読まれません。本来は[3]に下記のように入るはずです。
26
- 本来は4番目に下記のように入るはずです。
27
30
 
28
31
  ```php
32
+ array(10) {
33
+  [0]=>
29
- string(13) "001r357820094"
34
+ string(13) "001r357820094"
35
+  [1]=>
30
- string(3) "001"
36
+ string(3) "001"
37
+  [2]=>
31
- string(57) "あいう機構"
38
+ string(57) "あいう機構"
39
+  [3]=>
32
- string(12) "00-1234-5678"
40
+ string(12) "00-1234-5678"
33
41
  ```
34
42
 
35
43
  初心者ながら自力で調べたところ[0x5c問題](https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp/table)というもので、構の文字の2バイト目が¥になり,がエスケープされているということに気が付きました。
36
44
 
37
- しかし読み込まれるcsvはsjis固定(エクセルの関係で)であり、それをうまくデータベースに戻さなければならず、どう解決すればいいかわかりません。
45
+ しかし読み込まれるcsvの文字コードはsjis(エクセルの保存関係で)であり、それをうまくデータベースに戻さなければならず、どう解決すればいいかわかりません。
38
46
 
39
47
  またsjisのファイルをsjis-winとしてmb_convert_variablesをかけていいのでしょうか?そうすることでハシゴの高(髙)などの問題は解決できました。しかしそれがやっていいことなのかはわかっていません。
40
48
 

7

記述の修正

2018/02/21 09:05

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -1,10 +1,14 @@
1
1
  ###前提・実現したいこと
2
2
 
3
+ **全体の流れ**
4
+
5
+ DBからCSVファイルを出力 → ユーザがそのCSVファイルをエクセルで編集 → DBにCSVファイルを入力
6
+
3
7
  現在csvを読み込んで配列に格納し、その配列をもとにDBのデータを更新するプログラムを書いています。
4
8
 
5
9
  ###発生している問題・エラーメッセージ
6
10
 
7
- そこで、下記のような**長いよ**エラーが出てしまいました。
11
+ 下記のエラーが出てしまいました。
8
12
 
9
13
  > SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'phone_number' at row 16876
10
14
 
@@ -19,9 +23,12 @@
19
23
  ```
20
24
 
21
25
  csvの区切り文字がうまく読まれません。
22
- 本来は配列の4番目に下記のように入るはずです。
26
+ 本来は4番目に下記のように入るはずです。
23
27
 
24
28
  ```php
29
+ string(13) "001r357820094"
30
+ string(3) "001"
31
+ string(57) "あいう機構"
25
32
  string(12) "00-1234-5678"
26
33
  ```
27
34
 
@@ -29,55 +36,56 @@
29
36
 
30
37
  しかし読み込まれるcsvはsjis固定(エクセルの関係で)であり、それをうまくデータベースに戻さなければならず、どう解決すればいいかわかりません。
31
38
 
32
- またsjisのファイルをsjis-winとしてmb_convert_variablesをかけていいのでしょうか?そうすることでハシゴの高(髙)などの問題は解決できました。しかしそれがいことなのかはわかっていません。
39
+ またsjisのファイルをsjis-winとしてmb_convert_variablesをかけていいのでしょうか?そうすることでハシゴの高(髙)などの問題は解決できました。しかしそれがやってことなのかはわかっていません。
33
40
 
34
41
  csvの読み込みは、下記のようにSplFileObjectを使い、それをlist関数を使い変数に詰めています。
42
+ (変数名$aなどは簡略化して書いています)
35
43
 
36
44
  ```php
37
- public function handle()
45
+ public function handle()
38
- {
46
+ {
39
- // CSVファイル読み込み
47
+ // CSVファイル読み込み
40
- $filePath = './aaa.csv';
48
+ $filePath = './aaa.csv';
41
- $file = new SplFileObject($filePath);
49
+ $file = new SplFileObject($filePath);
42
- $file->setFlags(SplFileObject::READ_CSV);
50
+ $file->setFlags(SplFileObject::READ_CSV);
43
51
 
44
- // ファイル内のデータをループ
52
+ // ファイル内のデータをループ
45
- foreach ($file as $row) {
53
+ foreach ($file as $row) {
46
- // 文字コード変換
54
+ // 文字コード変換
47
- mb_convert_variables('utf8', 'sjis-win', $row);
55
+ mb_convert_variables('utf8', 'sjis-win', $row);
48
56
 
49
- // list関数を使い変数にデータを格納
57
+ // list関数を使い変数にデータを格納
50
- list(
58
+ list(
51
- $a,
59
+ $a,
52
- $b,
60
+ $b,
53
- $c,
61
+ $c,
54
- $d,
62
+ $d,
55
- $e,
63
+ $e,
56
- $f,
64
+ $f,
57
- $g,
65
+ $g,
58
- $h,
66
+ $h,
59
- $i,
67
+ $i,
60
- $j,
68
+ $j,
61
- $k
69
+ $k
62
- ) = $row;
70
+ ) = $row;
63
71
 
64
72
  ```
65
73
 
66
- その後、DBは下記のようにクエリービルダーを使いアップデートしています。
74
+ その後、DBは下記のようにクエリービルダーを使い必要項目だけアップデートしています。
67
- おかしいデータの手前でexit()して、そこまではうまく入ることを確認できています。
68
75
  DBはutf8-unicode-ciでMySQLを使っています。
69
76
 
70
77
  ```php
71
- // CSVから取得したデータをDBに戻す
78
+ // CSVから取得したデータをDBに戻す
72
- DB::table('test_database')->where('a', $a)->update([
79
+ DB::table('test_database')->where('a', $a)->update([
73
- 'b' => $b,
80
+ 'b' => $b,
74
- 'c' => $c,
81
+ 'c' => $c,
75
- 'updated_at' => date("Y-m-d H:i:s")
82
+ 'updated_at' => date("Y-m-d H:i:s")
76
- ]);
83
+ ]);
77
84
  ```
78
85
 
79
86
  ###補足情報(言語/FW/ツール等のバージョンなど)
80
87
 
88
+ 開発環境:Vagrant + VirtualBox / Homestead
81
89
  言語:php-7.1.14 (NTS)
82
90
  フレームワーク:Laravel5.5 (LTS)
83
91
  サーバー:nginx

6

2018/02/21 08:59

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -15,7 +15,7 @@
15
15
  ```php
16
16
  string(13) "001r357820094"
17
17
  string(3) "001"
18
- string(57) "機構",00-1234-5678""
18
+ string(57) "あいう機構",00-1234-5678""
19
19
  ```
20
20
 
21
21
  csvの区切り文字がうまく読まれません。

5

2018/02/20 11:21

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -79,6 +79,6 @@
79
79
  ###補足情報(言語/FW/ツール等のバージョンなど)
80
80
 
81
81
  言語:php-7.1.14 (NTS)
82
- フレームワーク:Laravel5.5
82
+ フレームワーク:Laravel5.5 (LTS)
83
83
  サーバー:nginx
84
84
  DB:MySQL

4

2018/02/20 11:20

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ###該当のソースコード
12
12
 
13
- 原因箇所をvar_dumpで見ると下記のようになっており、
13
+ 該当箇所をvar_dumpで見ると下記のようになっており、
14
14
 
15
15
  ```php
16
16
  string(13) "001r357820094"
@@ -27,7 +27,7 @@
27
27
 
28
28
  初心者ながら自力で調べたところ[0x5c問題](https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp/table)というもので、構の文字の2バイト目が¥になり,がエスケープされているということに気が付きました。
29
29
 
30
- しかし読み込まれるcsvはsjis固定であり、それをうまくデータベースに戻さなければならず、どう解決すればいいかわかりません。
30
+ しかし読み込まれるcsvはsjis固定(エクセルの関係)であり、それをうまくデータベースに戻さなければならず、どう解決すればいいかわかりません。
31
31
 
32
32
  またsjisのファイルをsjis-winとしてmb_convert_variablesをかけていいのでしょうか?そうすることでハシゴの高(髙)などの問題は解決できました。しかしそれが良いことなのかはわかっていません。
33
33
 
@@ -64,7 +64,7 @@
64
64
  ```
65
65
 
66
66
  その後、DBは下記のようにクエリービルダーを使いアップデートしています。
67
- ここはおかしいデータの手前でexit()して、そこまではうまく入ることを確認できました
67
+ おかしいデータの手前でexit()して、そこまではうまく入ることを確認できてい
68
68
  DBはutf8-unicode-ciでMySQLを使っています。
69
69
 
70
70
  ```php

3

2018/02/20 11:19

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  ###補足情報(言語/FW/ツール等のバージョンなど)
80
80
 
81
- 言語:php-7.1.14-Win32-VC14-x64 (ノンスレッドセーフ)
81
+ 言語:php-7.1.14 (NTS)
82
- フレームワーク:laravel (Homestead)
82
+ フレームワーク:Laravel5.5
83
83
  サーバー:nginx
84
84
  DB:MySQL

2

文法の修正

2018/02/20 11:17

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  ###補足情報(言語/FW/ツール等のバージョンなど)
80
80
 
81
- 言語:PHP
81
+ 言語:php-7.1.14-Win32-VC14-x64 (ノンスレッドセーフ)
82
82
  フレームワーク:laravel (Homestead)
83
83
  サーバー:nginx
84
84
  DB:MySQL

1

文法の修正

2018/02/20 08:34

投稿

T.FUJII
T.FUJII

スコア21

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,15 @@
1
+ ###前提・実現したいこと
2
+
1
3
  現在csvを読み込んで配列に格納し、その配列をもとにDBのデータを更新するプログラムを書いています。
4
+
5
+ ###発生している問題・エラーメッセージ
6
+
2
7
  そこで、下記のような**長いよ**エラーが出てしまいました。
3
8
 
4
- SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'phone_number' at row 16876
9
+ > SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'phone_number' at row 16876
5
10
 
11
+ ###該当のソースコード
12
+
6
13
  原因箇所をvar_dumpで見ると下記のようになっており、
7
14
 
8
15
  ```php
@@ -67,4 +74,11 @@
67
74
  'c' => $c,
68
75
  'updated_at' => date("Y-m-d H:i:s")
69
76
  ]);
70
- ```
77
+ ```
78
+
79
+ ###補足情報(言語/FW/ツール等のバージョンなど)
80
+
81
+ 言語:PHP
82
+ フレームワーク:laravel (Homestead)
83
+ サーバー:nginx
84
+ DB:MySQL