電子書籍の厳選無料作品が豊富!

こんばんは。
ただいまPHP勉強中です。
サンプルのサイトなど見てがんばっていますが、データベースにCSVからデータを取り込むところでつまづいています。
サンプルコードがあるサイトや、ヒントでも教えていただけたらと思います。
どうぞよろしくお願いします。

A 回答 (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から呼び出した方がめちゃくちゃパフォーマンスはいいです。

参考URL:http://www.php.net/manual/ja/function.fgets.php
    • good
    • 0
この回答へのお礼

こんにちは。
スクリプトまで教えていただいてありがとうございます・・助かります。
ここまで教えていただいたら後はなんとかなりそうです。
やはり、psqlコマンドから実行するほうが速いんですね。
今は実験段階なので、本番で使用する時には頭に入れておこうと思います。
マニュアルは見たつもりなのですが・・まだ甘いですね。
勉強になります。どうもありがとうございました!

お礼日時:2003/03/16 17:31

データベースには何をお使いでしょうか?



たとえば、CSVファイルがカンマ区切りなら、CSVファイルを1行ずつ読みとってカンマをデリミタにしてsplit()で配列に格納、INSERT文でデータベースにインポート。
ただし、行の数だけINSERTを行うと、かなりパフォーマンスが悪いかもしれません。

PHPから、データベース独自のコピーコマンドを使う。
PostgreSQLしか知らないのですが、PostgreSQLにはファイルからデータベースにインポートするためのCOPYコマンドがあります。それを使えば簡単にできます。
たとえば、

psql -h ホスト名 -c "copy テーブル名 from 'ファイル名' using delimiters ',';" データベース名

という感じですね。これをsystem()やexec()などを使ってPHPから実行すればどうでしょう?
    • good
    • 0
この回答へのお礼

ありがとうございます!
すみません、書き忘れましたがDBはPostgreSQLです。
なので教えていただいたコマンドも試してみようと思います!
あと、画面上から登録させる方法も試したいので、
そちらの方で今がんばっています。
テーブルにINSERTする方法はわかるのですが、
CSVを一行ずつ読み込んで変数に格納して・・・
ってところがわかってないです。
また何かありましたら教えてください!

お礼日時:2003/03/15 23:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!