- ベストアンサー
csvからの取込み
こんばんは。 ただいまPHP勉強中です。 サンプルのサイトなど見てがんばっていますが、データベースにCSVからデータを取り込むところでつまづいています。 サンプルコードがあるサイトや、ヒントでも教えていただけたらと思います。 どうぞよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$conn = pg_connect("接続文字列"); $fd = fopen ("ファイル名", "r"); while (!feof ($fd)) { $line = split(",",fgets($fd, 1行のバイト数)); $sql = "insert into テーブル名 (カラム1,カラム2,カラム3,・・・) values ('$line[0]','$line[1]','$line[2]',・・・)"; pg_query($conn,$sql); } fclose ($fd); って言う感じでしょうか? この辺のことはマニュアルに載っています。 マニュアルをみて研究してみてください。 ただしこの方法は、レコード数が多くなると恐ろしくパフォーマンスが悪いと思います。悪くするとPHPがタイムアウトすることもあります(経験談)。 どうせならpsqlのCOPYコマンドをPHPから呼び出した方がめちゃくちゃパフォーマンスはいいです。
その他の回答 (1)
- maro
- ベストアンサー率47% (95/199)
データベースには何をお使いでしょうか? たとえば、CSVファイルがカンマ区切りなら、CSVファイルを1行ずつ読みとってカンマをデリミタにしてsplit()で配列に格納、INSERT文でデータベースにインポート。 ただし、行の数だけINSERTを行うと、かなりパフォーマンスが悪いかもしれません。 PHPから、データベース独自のコピーコマンドを使う。 PostgreSQLしか知らないのですが、PostgreSQLにはファイルからデータベースにインポートするためのCOPYコマンドがあります。それを使えば簡単にできます。 たとえば、 psql -h ホスト名 -c "copy テーブル名 from 'ファイル名' using delimiters ',';" データベース名 という感じですね。これをsystem()やexec()などを使ってPHPから実行すればどうでしょう?
お礼
ありがとうございます! すみません、書き忘れましたがDBはPostgreSQLです。 なので教えていただいたコマンドも試してみようと思います! あと、画面上から登録させる方法も試したいので、 そちらの方で今がんばっています。 テーブルにINSERTする方法はわかるのですが、 CSVを一行ずつ読み込んで変数に格納して・・・ ってところがわかってないです。 また何かありましたら教えてください!
お礼
こんにちは。 スクリプトまで教えていただいてありがとうございます・・助かります。 ここまで教えていただいたら後はなんとかなりそうです。 やはり、psqlコマンドから実行するほうが速いんですね。 今は実験段階なので、本番で使用する時には頭に入れておこうと思います。 マニュアルは見たつもりなのですが・・まだ甘いですね。 勉強になります。どうもありがとうございました!