回答編集履歴
1
ソースコード更新
answer
CHANGED
@@ -2,16 +2,19 @@
|
|
2
2
|
|
3
3
|
```lang-php
|
4
4
|
<?php
|
5
|
-
function
|
5
|
+
function formatting_to_sql($v) {
|
6
|
+
//空白文字を除去
|
7
|
+
$v = trim($v);
|
8
|
+
|
6
9
|
if( preg_match('/[^\d]/',$v) ){
|
7
|
-
//数字以外の文字を含む場合は
|
10
|
+
//数字以外の文字を含む場合はテキストとして判別して文字コードを変えて返す
|
8
|
-
return $v;
|
11
|
+
return mb_convert_encoding($v, "UTF-8", "SJIS");
|
9
12
|
}
|
10
13
|
if( preg_match('/^0+$/',$v) ){
|
11
14
|
//テキストが全部0だったら0にして返す
|
12
15
|
return 0;
|
13
16
|
} else {
|
14
|
-
//テキスト
|
17
|
+
//テキストが数字で0以外の数字があったら先頭の0を省いて返す
|
15
18
|
return intval(preg_replace('/^0*([1-9][0-9]*)$/','$1',$v,1));
|
16
19
|
}
|
17
20
|
}
|
@@ -20,21 +23,34 @@
|
|
20
23
|
$fp = fopen('sample.csv','r');
|
21
24
|
|
22
25
|
//一行ずつCSVからデータを取り出しつつループ
|
26
|
+
$i = 0;
|
23
27
|
while( $line = fgetcsv($fp) ){
|
28
|
+
//ヘッダ行からセル名を記憶する
|
29
|
+
if( $i == 0){
|
30
|
+
$cell_sql = array();
|
31
|
+
foreach( $line as $v ){
|
32
|
+
$cell_sql[] = sprintf("%s",$v);
|
33
|
+
}
|
34
|
+
} else {
|
35
|
+
//一行ずつ取り出したCSVの各セルをトリム関数を使ってSQL用に成形
|
24
|
-
|
36
|
+
$line_sql = array();
|
25
|
-
|
26
|
-
//一行ずつ取り出したCSVの各セルをトリム関数を使ってSQL用に成形
|
27
|
-
|
37
|
+
foreach( $line as $v){
|
28
|
-
|
38
|
+
$line_sql[] = sprintf("'%s'",formatting_to_sql($v));
|
39
|
+
}
|
40
|
+
//まとめたセルをはき出してSQLを成形
|
41
|
+
$sql = sprintf(
|
42
|
+
'INSERT INTO table (%s) values (%s);'
|
43
|
+
,mysql_real_escape_string(implode(',',$cell_sql))
|
44
|
+
,mysql_real_escape_string(implode(',',$line_sql))
|
45
|
+
);
|
46
|
+
|
47
|
+
//SQL実行
|
48
|
+
//...
|
29
49
|
}
|
30
|
-
//
|
50
|
+
//ループカウンタをインクリメント
|
31
|
-
$sql = sprintf('INSERT INTO table values (%s);',implode(',',$line_sql));
|
32
|
-
|
33
|
-
//SQL実行
|
34
|
-
|
51
|
+
$i++;
|
35
52
|
}
|
36
53
|
|
37
54
|
//ファイルを閉じる
|
38
55
|
fclose($fp);
|
39
|
-
|
40
56
|
```
|