こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHPでCSVをダウンロード/アップロードしたい

会社の方で必要に迫られ、以下のような処理を行おうとして行き詰まっております。
(一旦ローカル環境にてテストをおこなっております。過去履歴やGoogle等で検索しましたが解決できなかったので、こちらに質問しました。)
 
 1.MySQLのデータをCSVでダウンロード
 2.excel等の表計算ソフトで編集
 3.編集したCSVをMySQLへアップロード
 
1で、カンマ/改行を一旦代替(例,を')にした(excel/テキストエディタ等での表示がおかしいため)
3で、代替したものを元に戻しアップロードさせる。
 
作成したPHPでは、ダウンロード/アップロード自体は問題ないのですが、
問題点1.アップロードの際、MySQLの日本語フィールドは「”」になる。
問題点2.上記3の方法で詰まっている。
 
環境
XAMPP Mac OS X版 0.7.4
PHP 5.2.6
MySQL 5.0.67
Apache 2.2.11
 
【ダウンロード用PHP】
<?php header("Content-Type: application/octet-stream"); ?>
<?php header("Content-Disposition: attachment; filename=output.csv"); ?>
<?php
$srv = "サーバー名";
$id = "ユーザーID";
$passwd = "パスワード"; //
$dbn = "データベース名"; //
$sql = "SELECT * FROM xxxx";

$db=mysql_connect($srv,$id,$passwd);
mysql_select_db($dbn,$db);
$rs=mysql_query($sql,$db);
for($i=0; $i<mysql_num_fields($rs); $i++){
print(mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","UTF-8").",");
}
print("\n");
for($j=0 ;$j<mysql_num_rows($rs); $j++) {
for($k=0; $k<mysql_num_fields($rs); $k++) {
$str=mysql_result($rs,$j,$k);
$search = array("\r\n","\n","\r","<br />");
$str = str_replace($search,";",$str);
$str = str_replace(",","-",$str);
print(mb_convert_encoding($str,"SJIS","UTF-8").",");
}
print("\n");
}
mysql_close($db);
?>

【アップロード用PHP】
<?php
$file = $_FILES[userfile]['name'] ;

//DB接続

$conn = mysql_connect($srv, $id, $passwd) or die("データベース接続エラー");
mysql_query("SET NAMES SJIS");
mysql_select_db($dbn) or die("データベース".$dbn."接続エラー");

$sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE phplesson.xxxx FIELDS TERMINATED BY ',' IGNORE 1 LINES";
mysql_query($sql, $conn) or die(アップデート失敗);
?>
 
以上、お知恵を拝借できましたら幸いです。

投稿日時 - 2009-06-05 10:05:23

QNo.5018331

すぐに回答ほしいです

質問者が選んだベストアンサー

ちょっと面倒になりますけど、うちではこんな手を使ってます。
アップロードの際にfgetcsv()でCSVを1行ずつ読んで、SQLのinsertで1行ずつ追加する‥‥をファイルエンドまで繰り返す。

ヘッダ部分を削除したり使用禁止文字の置換とか文字コードの変換をかけながらやってるので1行ずつの方が都合良かったりしますので。

投稿日時 - 2009-06-05 10:58:53

お礼

ご回答ありがとうございます。

1度に処理しようとしたのが行き詰った原因かと反省しています。
ご回答内容でやってみます。

投稿日時 - 2009-06-05 16:03:37

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

bx2

fputcsvとfgetcsvを使ったら楽になると思います。
http://jp2.php.net/manual/ja/function.fputcsv.php
http://jp2.php.net/manual/ja/function.fgetcsv.php

投稿日時 - 2009-06-05 18:56:39

お礼

ご回答ありがとうございます。
プログラム自体が初心者で見よう見まねでやってみたものの、
やはり行き詰まってしまいました。
色々試行錯誤しながらやってみます。

投稿日時 - 2009-06-07 23:36:10

あなたにオススメの質問