質問編集履歴
10
書式の改善
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
|
-
|
9
|
+
csvを読み込んで配列に格納し、その配列をもとにDBのデータを更新するプログラムです。
|
9
10
|
|
10
11
|
###発生している問題・エラーメッセージ
|
11
12
|
|
9
書式の改善
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
文字コードの変換について
|
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
誤字の修正
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
記述の修正
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
|
-
本来は
|
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
|
-
|
45
|
+
public function handle()
|
38
|
-
|
46
|
+
{
|
39
|
-
|
47
|
+
// CSVファイル読み込み
|
40
|
-
|
48
|
+
$filePath = './aaa.csv';
|
41
|
-
|
49
|
+
$file = new SplFileObject($filePath);
|
42
|
-
|
50
|
+
$file->setFlags(SplFileObject::READ_CSV);
|
43
51
|
|
44
|
-
|
52
|
+
// ファイル内のデータをループ
|
45
|
-
|
53
|
+
foreach ($file as $row) {
|
46
|
-
|
54
|
+
// 文字コード変換
|
47
|
-
|
55
|
+
mb_convert_variables('utf8', 'sjis-win', $row);
|
48
56
|
|
49
|
-
|
57
|
+
// list関数を使い変数にデータを格納
|
50
|
-
|
58
|
+
list(
|
51
|
-
|
59
|
+
$a,
|
52
|
-
|
60
|
+
$b,
|
53
|
-
|
61
|
+
$c,
|
54
|
-
|
62
|
+
$d,
|
55
|
-
|
63
|
+
$e,
|
56
|
-
|
64
|
+
$f,
|
57
|
-
|
65
|
+
$g,
|
58
|
-
|
66
|
+
$h,
|
59
|
-
|
67
|
+
$i,
|
60
|
-
|
68
|
+
$j,
|
61
|
-
|
69
|
+
$k
|
62
|
-
|
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
|
-
|
78
|
+
// CSVから取得したデータをDBに戻す
|
72
|
-
|
79
|
+
DB::table('test_database')->where('a', $a)->update([
|
73
|
-
|
80
|
+
'b' => $b,
|
74
|
-
|
81
|
+
'c' => $c,
|
75
|
-
|
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
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
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
title
CHANGED
File without changes
|
body
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
###該当のソースコード
|
12
12
|
|
13
|
-
|
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
|
-
|
67
|
+
おかしいデータの手前でexit()して、そこまではうまく入ることを確認できています。
|
68
68
|
DBはutf8-unicode-ciでMySQLを使っています。
|
69
69
|
|
70
70
|
```php
|
3
title
CHANGED
File without changes
|
body
CHANGED
@@ -78,7 +78,7 @@
|
|
78
78
|
|
79
79
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
80
80
|
|
81
|
-
言語:php-7.1.14
|
81
|
+
言語:php-7.1.14 (NTS)
|
82
|
-
フレームワーク:
|
82
|
+
フレームワーク:Laravel5.5
|
83
83
|
サーバー:nginx
|
84
84
|
DB:MySQL
|
2
文法の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -78,7 +78,7 @@
|
|
78
78
|
|
79
79
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
80
80
|
|
81
|
-
言語:
|
81
|
+
言語:php-7.1.14-Win32-VC14-x64 (ノンスレッドセーフ)
|
82
82
|
フレームワーク:laravel (Homestead)
|
83
83
|
サーバー:nginx
|
84
84
|
DB:MySQL
|
1
文法の修正
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
|