CSVをDBに登録する方法とは?

このQ&Aのポイント
  • クライアント側でCSVをアップロードしてDBにデータを登録する方法を教えてください。
  • HTMLの<input type='file'>を使用してCSVをアップロードすることはできましたが、データの中身を取り出す方法がわかりません。
  • phpのみで解決することは可能なのでしょうか?他の言語や技術も必要ですか?
回答を見る
  • ベストアンサー

CSVをDBに登録するには

質問させて頂きます。 言語:php サーバ:Linux 下記のようなDBに -------- 1|山田 2|田中 3|鈴木 下記のようなCSV(で無くても良いです)を用いてDBにデータを登録したいと考えています。 《csv》 吉田 斉藤 高橋 『質問詳細』 この時、サーバ側にCSVを用意しておくのではなく、操作をしているクライアント側でCSVをアップロードしてもらいたいと考えているのですが、方法がまったくわかりません。 イメージとしては、「参照」というボタンを押してファイルを選択し、投稿するといったよく見かける形です。 ※アップロードに関してはhtmlの<input type="flie">を使用することでうまくいきましたが、そのデータの中身を取り出す方法がわからず苦戦しています。 サーバ側に用意しているファイルであれば、そのファイルが置いてある場所までのパスを指定して、ファイルを開けばいいと思うのですが、この場合はどのような処理を行えばよいのでしょうか? phpのみで解決?javascript?cgi?いろいろ調べてみましたが、参考になるものを見つけることが出来なかったので質問させて頂きました。 ご存知の方がいらっしゃいましたら、どなたかよろしくお願い致します。 また、質問の説明に不備がありましたら、すぐに修正しますのでご指摘下さい。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

とりあえずは、マニュアルを読んでください。 http://www.php.net/manual/ja/features.file-upload.post-method.php その上でわからない点を質問していただければよろしいかと。

non05410
質問者

お礼

回答ありがとうございます! その後もいろいろと調べていると解決することが出来ました! マニュアルも読んではいたのですが、変に難しく考えすぎていたようです。 テンポラリファイルに保存されているので、それを開けば良かっただけなんですね。 $_FILESの中からCSVに記述したデータを取り出させるのかと思っていました。 あらためて、ありがとうございました!

関連するQ&A

  • CSVデータをDBに移行するには

    Perlを使ってCSVデータをDBに移行して格納したい のですが、流れはCSVファイルを開いて、CSVファイルを連想配列に書き込んで、 DBを開いて、連想配列データをデータベースに書き込んで、DBを閉じるという 流れの考えでよろしいのでしょうか?

    • ベストアンサー
    • CGI
  • csvをDBへ読み込んだら、NULLが勝手に0に

    csvファイルをMySQLへ読み込んだら、空白のところが勝手に0に置き換わってしまいました。 置き換わったカラムの型が、全部INTだったので、 試しにVARCHARへ変え、再度、取り込み処理を実施してみたところ、 希望通りに(空白のところは空白のままで)無事データを取り込むことが出来ました。 ■質問1 考えられる原因としては、DBの設定? それとも、PHP側の書き方でしょうか? ■質問2 データ型を決める際、数字はINT、文字列はVARCHAR、ぐらいの認識しかないのですが、 今回のように、INT型のカラムを、VARCHAR型に、変えたりすると、 起こり得るリスクとしては、どのようなものが考えられでしょうか? ■質問3 DBのデータ型が、「INT」と「VARCHAR」では、PHP側の書き方も変わってくるのでしょうか? □PHPの内容 ▽まず、UTF-8形式で上書き exec("nkf -w --overwrite data.csv"); ▽接続後読み込み $sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE `読み込むテーブルの名前` FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\' LINES TERMINATED BY '\\r\\n'";

    • ベストアンサー
    • PHP
  • MYSQLのDBに大容量のCSVをUPしたいです。

    さくらインターネットのMYSQLのDBに大容量(約13MB)のCSVファイルをアップロードする方法を教えて下さい。 下記(1)~(3)のようにいくつかの方法を試しましたが、結果的に全件をアップロードができていません。 (1)最初にレンタルサーバーのさくらインターネットでサーバーを借りましたが、phpMyAdminにCSVファイルをアップロードしようしました。 kuin_mstという名前のテーブルを作成後、このテーブルを選択してインポート画面からインポートするCSVファイルを選択し、設定として「ファイルの文字セット」をutf8に、 「インポートするファイルの形式」のCSV形式のフィールド区切り記号をカンマに、フィールド囲み記号を空白に指定しました。 そして、実行を押すと、しばらくして「Internet Explorerではこのページは表示できません。」が表示されました。 これに対してF5キーを押して再実行すると元の画面に戻り、kuin_mstテーブルの件数を見ると、122915件中58114件がアップロードされてました。 他のインポートするファイルの形式の「LOAD DATA する CSV」や「SQL」も試しましたが、結果として何もアップロードされませんでした。 考察:13MBのデータを3回分に分割してこの作業を行えば目的が達成できるように思いますが、結果として入れるべき全件のデータがアップロードされたのかを検証する方法が分かりません。 (2)さくらはSSHが使えるのでpoderosaをダウンロードしてサーバーにアクセスしましたが、SQLのみ記述されたtest1.txtをアップロードするコマンドを次のように投入したら テーブルの削除や作成は成功しエラーが発生しませんでした。 コマンド 「mysql -h mysql○○○.db.sakura.ne.jp -u アカウント名 -p DB名 < test1.txt」 しかし、このtest1.txt内に「LOAD DATA INFILE './KEN_ALL.CSV' INTO TABLE kuin_mst FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';」 の一行を加えて実行すると「ERROR 1045 (28000) at line 2513: Access denied for user 'ユーザー名'@'%' (using password: YES)」というエラーが発生します。 このエラーを調べると「コンソールからデータベース接続する時にパスワードが間違っている」と説明しているサイトがありましたが、何度確認しても間違えていませんし、間違えていたら「LOAD DATA ~」の行を 追加していない状態の処理で同じエラーが出るはずです。 ちなみに、自宅PCのWEBサーバーで、「LOAD DATA ~」を追加したtest1.txtをコマンドプロンプトで実行するとアップロードが正常に行われるのでCSVファイル自体は問題がないはずです。 ※KEN_ALL.CSVファイルは、郵便番号-住所データ(utf-8保存で約13MB)でレコードはカンマ区切り(例として1レコード抜粋→640941,ホッカイドウ,サッポロシチュウオウク,アサヒガオカ,北海道,札幌市中央区,旭ケ丘) となっています。 ※test1.txtとKEN_ALL.CSVの両ファイルは/home/アカウント名の階層に置いてこの処理を実行しました。 結果として何が原因でアップロードができないのかがよくわかりませんでした。 (3)BIGDUMPという大容量ファイルを分割してDBにアップロードできるツールを見つけたので、いろいろと説明があるサイトを参考にブラウザにて実行したらKEN_ALL.CSVファイルがFilenameの欄に表示されました。 同画面でstart import1をクリックしましたが、「You have to specify $csv_insert_table when using a CSV file. 」というメッセージが出てきました。 結果として、この意味がよくわかりませんでしたが、カンマ区切りのみのCSVファイルだけをアップロードすることはできないのかもと思いました。 以上、悪戦苦闘しても解決できないのでどうかアドバイスを下さい。 宜しくお願いします。 ■環境 UNIX系 OS FreeBSD Apache 1.3.x PHP 5.2.17 phpMyAdmin 3.3.10.3 MySQL 5.1 MySQL 文字コード UTF-8 bigdump ver.0.34b

    • ベストアンサー
    • MySQL
  • CSVで画像をDBにつっこみたい

    お疲れ様です。 いつもお世話になっております。 現在PHP+MySQLで、名刺の管理ソフトを社内向けに作っています。 名刺の画像もレコードとしてくっつけるため、BLOBでデータを持っています。 一件一件のデータのインサートはできるのですが、CSVでのインサートの仕様を今検討していまして、皆様のお力を借りたく思います。 よろしくお願いします。 仕様 ・名刺画像はBLOBでDBにインサートする ・データはCSVであげる 対応検討 ・CSVでバイナリを扱える方法を探す  →一枚一枚バイナリに変換→CSVなので、手間な上に扱いにくい ・パスだけCSVに指定、その後パスをさらって画像だけPHPでバイナリ化、インサート  →パスからPHPでアップ処理ができるのか今のところ不明 ・CSVにファイル名だけ記載してもらい、CSV+画像をzipしてもらってアップ。execで解凍し、バイナリ化し、インサート  →外部コマンドの許可が必要。 本当は・・・ ・ファイルDIRを作ってファイルを置き、CSVにはパスだけ記載。  →一番楽だが今回は対象外。 てなところなんです 何かいい案はないでしょうか。

    • ベストアンサー
    • PHP
  • DBからのCSVファイルダウンロード

    MySQLに溜めたデータをCSV形式でダウンロードしたいと思っていますが、ダウンロードしたファイルが文字化けして困っています。 PHP、DBともにEUCで作成しているのですが、プログラムの中に文字コードに関する記述が必要になるとは思うのですが、何を追加すればいいのか教えていただけますでしょうか?

    • ベストアンサー
    • PHP
  • DBからCSV出力する方法

    DBのデータをCSVファイルでダウンロードする機能を作成しています。 DBのデータをカンマ区切りで変数に格納するところまではできましたが、CSVでのダウンロード(ダウンロードダイアログ)ができません。 以下が実際の記述ですが、間違いを指摘いただけないでしょうか。 ※$result 出力するデータ全てが,区切りで格納されている <PHPファイル内> $size = strlen($result); $filename = csv_dl.csv; //csvdll header("Content-Disposition: inline; filename=\"".basename($filename)."\""); header("Content-Length: ".$size); header("Content-Type: application/octet-stream"); 以上です。 リターンが遅くなるかもしれませんが、どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP→DB→CSV 「ダウンロードできません」

    DBの内容をPHPを使ってCSVに変換してダウンロードするプログラムを使っています。 プログラム(csv.php)の先頭に header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); header ("Content-Description: File Transfer"); を書いているのですが、いざダウンロードをする画面になるとoutput.csvでなくcsv.phpをダウンロードすることになってしまいダウンロードができません。 表示だけならばっちりでているのですが、、、ファイルタイプがHTMLとなっているのも意味不明です。 だれか助けてください(><

    • ベストアンサー
    • PHP
  • WebサーバとDBサーバを用いてファイルを格納したいです、教えてください。

    PHPとMySQLを使用して、DBにバイナリファイルを格納する方法を考えています。WEB上からバイナリファイルをアップロードしてDBに格納し、後でダウンロードできる仕組みを作りたいです。使用しているサーバはfedora11です。 PHPとDBの連携はできたのですが、バイナリデータの格納方法は探しても見つからなくて困っています。誰か教えてください。

    • ベストアンサー
    • MySQL
  • CSVへの書込み

    はじめまして。 サーバー初心者でおかしな質問をしてしまっているかもしれませんが、どうかお付き合いくださいませ。 サーバー:fedora11 PHPでCSVファイルに書込みを行ったのですが、ダブルクォーテーション(")を表記したくて以下のようにしました。 ・PHP fputcsv( $data, Array('"犬"','300')); と表記したら ・CSV """犬""",300 と表記されてしまいます。 ・CSV "犬",300 というように表記するにはどうしたらよいかご存知の方いらっしゃったらお手数ですがご指導を御願いいたします。

    • 締切済み
    • PHP
  • インターフェースからCSVを取り込んで、MySQLにインポート

    インターフェースからCSVを取り込んで、MySQLにインポート ブラウザのインターフェースからCSVファイルを選択して、MySQLにインポートするようにしたいのですが、 (1)ファイルのアップロード (2)サーバー上にある(アップロードされた)CSVファイルをMySQLにインポート という手順で処理するほかないでしょうか? ローカルのCSVファイルを直接MySQLにインポートするような画期的な方法(ライブラリなど)あったらいいなと思い質問します。 PHPのバージョン:5.2 MySQLのバージョン:5.1 です。 まだ基本設計の段階なので、具体的な質問になっておらず申し訳ありませんが、 よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう