[PHP-users 332] Re: PostgreSQLの検索結果をファイルに出力する

Masashi Ohba php-users@php.gr.jp
Thu, 28 Jun 2001 14:16:39 +0900


大場です。

Cmdr. Daiyu Hatakeyama wrote;

>データ量が20カラム、100,000件くらいあります。
>Phpのプログラムから、
>PostgreSQLでのSelectの検索結果を、
>ファイルに出力したいのですが、
>何か良い手はないでしょうか?

何か良い手って、やること考えたら
データを取り出す
ファイルを書き出すプログラムにデータを食わせる
プログラムが処理をする
ってことをするわけだから

「PHPでそういうプログラムを書きましょう」

って話になると思います。

ファイルに書き出すって言ったって
CSVにするのか、セパレータ不要なのか
書き出す時のコードはどうするのかとか(日本語入ってたら)
考えなきゃならないことは多いんですが
「良い手がないか?」という質問ってことは
「何かやったけど上手くいかない」ってことでしょうか?
それなら上手く行かなかった時のPHPのコードは?

#とりあえず聞いてから進めようってことなら
#MLはサポートセンターじゃないんだから
#認識が甘いです。


PHP3で以下のようなincludeファイル作って
検索用のSQL文       $sql
ファイル名          $file
保存時の漢字コード  $code
(エクセルで処理できる様にSJISにしてたかな)
の変数をこの関数に食わせるとCSVファイルに保存出来てます。
下手な書き方だとは思うけどこういうことがしたい?

ここから---------------------(エラー部分の処理は削除しました)
<?php
function csv_output($sql, $file, $code){

	//検索の実行
	$result = pg_exec($sql);
	$rows = pg_numrows($result);  //行数を取得
	$columns = pg_numfields($result);  //列数を取得
	$i=0; //表横軸ループ初期値
	$j=0; //表縦軸ループ初期値

	//ファイルオープン
	$fp = fopen($file, "w");

	//ファイルロック
	flock($fp, 2);

	//データの初期化
	$data = "";

	//出力
	for ($j = 0; $j < $rows; $j++){
		for ($i = 0; $i < $columns; $i++){
			//データの取り出し
			$term=pg_result($result, $j, $i);
			$data = $data . $term . ",";
		}
		//行末の改行処理
		$data = $data . "\n";
	}

	//漢字コードの変換
	$data=i18n_convert($data, $code);

	//ファイルへ書込み
	fwrite($fp, "$data");

	//ロック解除
	flock($fp, 3);

	//ファイルのクローズ
	fclose($fp);
	}
?>
ここまで---------------------

------------------------------------------------------------
大場正志(Masashi Ohba)
E-Mail  ohba@intelight.co.jp
(株) インテライト
http://www.intelight.co.jp
------------------------------------------------------------