回答編集履歴

1

ソースコード更新

2015/04/10 01:05

投稿

hermitagejp
hermitagejp

スコア53

test CHANGED
@@ -6,13 +6,19 @@
6
6
 
7
7
  <?php
8
8
 
9
- function trim_zero($v) {
9
+ function formatting_to_sql($v) {
10
+
11
+ //空白文字を除去
12
+
13
+ $v = trim($v);
14
+
15
+
10
16
 
11
17
  if( preg_match('/[^\d]/',$v) ){
12
18
 
13
- //数字以外の文字を含む場合はそのまま返す
19
+ //数字以外の文字を含む場合はテキストとして判別して文字コードを変えて返す
14
20
 
15
- return $v;
21
+ return mb_convert_encoding($v, "UTF-8", "SJIS");
16
22
 
17
23
  }
18
24
 
@@ -24,7 +30,7 @@
24
30
 
25
31
  } else {
26
32
 
27
- //テキスト0以外の数字があったら先頭の0を省いて返す
33
+ //テキストが数字で0以外の数字があったら先頭の0を省いて返す
28
34
 
29
35
  return intval(preg_replace('/^0*([1-9][0-9]*)$/','$1',$v,1));
30
36
 
@@ -42,29 +48,57 @@
42
48
 
43
49
  //一行ずつCSVからデータを取り出しつつループ
44
50
 
51
+ $i = 0;
52
+
45
53
  while( $line = fgetcsv($fp) ){
46
54
 
47
- $line_sql = array();
55
+ //ヘッダ行からセル名を記憶する
48
56
 
49
-
57
+ if( $i == 0){
50
58
 
51
- //一行ずつ取り出したCSVの各セルをトリム関数を使ってSQL用に成形
59
+ $cell_sql = array();
52
60
 
53
- foreach( $line as $k => $v){
61
+ foreach( $line as $v ){
54
62
 
63
+ $cell_sql[] = sprintf("%s",$v);
64
+
65
+ }
66
+
67
+ } else {
68
+
69
+ //一行ずつ取り出したCSVの各セルをトリム関数を使ってSQL用に成形
70
+
71
+ $line_sql = array();
72
+
73
+ foreach( $line as $v){
74
+
55
- $line_sql[] = sprintf("'%s'",trim_zero($v));
75
+ $line_sql[] = sprintf("'%s'",formatting_to_sql($v));
76
+
77
+ }
78
+
79
+ //まとめたセルをはき出してSQLを成形
80
+
81
+ $sql = sprintf(
82
+
83
+ 'INSERT INTO table (%s) values (%s);'
84
+
85
+ ,mysql_real_escape_string(implode(',',$cell_sql))
86
+
87
+ ,mysql_real_escape_string(implode(',',$line_sql))
88
+
89
+ );
90
+
91
+
92
+
93
+ //SQL実行
94
+
95
+ //...
56
96
 
57
97
  }
58
98
 
59
- //まとめたセルをはき出してSQLを成形
99
+ //ループカウンタインクリメント
60
100
 
61
- $sql = sprintf('INSERT INTO table values (%s);',implode(',',$line_sql));
62
-
63
-
64
-
65
- //SQL実行
66
-
67
- //...
101
+ $i++;
68
102
 
69
103
  }
70
104
 
@@ -74,6 +108,4 @@
74
108
 
75
109
  fclose($fp);
76
110
 
77
-
78
-
79
111
  ```