• ベストアンサー

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(アップデート失敗); ?>   以上、お知恵を拝借できましたら幸いです。

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

  • ベストアンサー
  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.1

ちょっと面倒になりますけど、うちではこんな手を使ってます。 アップロードの際にfgetcsv()でCSVを1行ずつ読んで、SQLのinsertで1行ずつ追加する‥‥をファイルエンドまで繰り返す。 ヘッダ部分を削除したり使用禁止文字の置換とか文字コードの変換をかけながらやってるので1行ずつの方が都合良かったりしますので。

uzumaki001
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • bx2
  • ベストアンサー率47% (97/206)
回答No.2
uzumaki001
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A