この処理は大して難しいわけでではありません。このプログラムを行うことは、CSVよりデータを読み込んで
DBに書き込みを行うことです。読み込みするCSVの列数が多くなると同じようなプログラムが増えて煩雑になる
ので配列を使って簡素化を図った利用例です。
■CSV読み込み方法
<CSV読み込みサンプルプログラム> read_csv.php
<?php
//CSVファイルを読み込んでDBの対象テーブルへinsertする例
///DB接続
$conn = mysqli_connect(); //パラメータを記載のこと
$path = '/CSVファイルの保存先/';
$fileName = '対象ファイル名.csv';
$path_file = $path.$fileName;
$i = 0; //読み込んだファイルの行数をカウント
$n = 35; //CSVファイルの列数を記載(35は記載例)
$f = fopen("$path_file", "r");
while($data = fgetcsv($f)){
if($i > 0){ //1行目は読み込まない。(項目名を外すため)
$data = mb_convert_encoding($data, 'UTF-8', 'sjis-win'); //Windowsのファイルならこのように文字コード変換
for($c = 0; $c < $n; $c++){
if(empty($data[$c])){
$data[$c] = 'null'; //データがないときはnullを登録
}else{
$data[$c] = mysqli_real_escape_string($conn,$data[$c]); //$connはmysqliに接続するコマンドを代入したもの
}
if($c == 0){
$inscolumn = 'data0';
$insData = $data[0];
}else{
$inscolumn = $inscolumn.',data'.;
$insData = $insData.", ".$data[$c];
}
}
//DBへの書き込み(テーブルのカラム名は、data0からの連番としている。)
$sql = "insert into 対象テーブル
(
$inscolumn
) values (
$insData
)
;";
mysqli_query($conn,$sql) or die("err1 $sql");
}
$i++;
}
fclose($f);
?>
■CSV書き込み方法
<CSV書き込みサンプルプログラム> write_csv.php
<?php
//DBの得意先マスターテーブルを書き出す例
//DB接続
$conn = mysqli_connect(); //パラメータを記載のこと
//ファイルの初期化(ファイル削除)
$fileName = "対象ファイル名.csv";
if(file_exists($filename)){
unlink($filename) or die('ファイル削除に失敗');
}
//書き出す項目名の指定カンマ・改行キー追加、文字コード変換
$i = mb_convert_encoding('項', 'sjis-win', 'UTF-8').",";
$tokuiCode = mb_convert_encoding('得意先コード', 'sjis-win', 'UTF-8').",";
$tokuiName = mb_convert_encoding('得意先名', 'sjis-win', 'UTF-8').",";
$address = mb_convert_encoding('住所', 'sjis-win', 'UTF-8')."¥n";
//csvファイルへの項目の書き出し
$file = fopen($filename, "a") or die("OPENエラー $filename");
flock($file, LOCK_EX);
fputs($file, $i.$tokuiCode.$tokuiName.$address);
flock($file, LOCK_UN);
fclose($file);
//データの抽出
$sql = "select 得意先コード,得意先名,住所 from 得意先マスター;";
$res = mysqli_query($conn,$sql) or die("err $sql");
while($row = mysqli_fetch_array($res){
$tokuiCode = $row["得意先コード"];
$tokuiName = $row["得意先名"];
$address = $row["住所"];
//書き出すデータの代入とカンマ・改行キー追加、文字コード変換
$ii = $i.",";
$tokuiCode = mb_convert_encoding($tokuiCode , 'sjis-win', 'UTF-8').",";
$tokuiName = mb_convert_encoding($tokuiName 'sjis-win', 'UTF-8').",";
$address = mb_convert_encoding($address, 'sjis-win', 'UTF-8')."¥n";
//csvファイルへのデータの書き出し
$file = fopen($filename, "a") or die("OPENエラー $filename");
flock($file, LOCK_EX);
fputs($file, $ii.$tokuiCode.$tokuiName.$address);
flock($file, LOCK_UN);
fclose($file);
$i++;
}
?>
<解説>
書き出すファイル名にパスが無いと、書き込みプログラムと同じフォルダーに保存されます。
※注意事項として
ファイルを書き出すフォルダーのパーミッションは環境に合わせて設定して下さい。例)664とか
40行目のfputs($file, $ii.$tokuiCode.$tokuiName.$address); ですが、
$ii を $i のままにするケースがあります。この際CSVへの書き出しは1列ずつずれてしまいます。