[PHP-doc 31] pg_copy_to/from Manual (draft)
Youichi Iwakiri
php-doc@php.gr.jp
Tue, 18 Dec 2001 19:35:41 +0900
いわきりです
#こちらにも参加させてもらいました
PostgreSQL拡張モジュールに下記の関数を大垣さんに
追加してもらいました。
pg_copy_to()
pg_copy_from()
英語のマニュアルは大垣さんが用意してくださるそうなので
日本語の方だけ(というか英語での記述は出来ません)書きました。
ご意見等ありましたらご連絡下さい。
XMLで書いたほうが良いのでしょうが取りあえずplain textです。
#環境を構築せんといかんですね。
----
関数名
pg_copy_to
(PHP4 >= 4.2.0)
pg_copy_to -- テーブル全体を配列として取得する
説明
mixed pg_copy_to(int connection_id, string table_name [, string delim [, string null_as]])
引数
connection_id
pg_[p]connect()により返されるPostgreSQLコネクションID
table_name
対象とするテーブル名
delim
列を区切るための識別子
※任意の1バイト文字のみが指定可能(multibyte文字は未サポート)
※デフォルトは"\t"
null_as
NULL値の代替文字列を指定可能
※デフォルトは"\N"
返り値:
行を一要素とする一次元配列(array)を返す。
失敗時はFALSE。
この関数はPostgreSQLのSQLインタプリタであるpsqlの\copyコマンドに
模した機能を提供するものです。SQLコマンドであるCOPYとは異なる点に
注意して下さい。
COPYコマンドはバックエンドが直接ファイルアクセスを行うためPostgreSQLの
所持者(owner)で無ければ実行不可能ですが、\copyコマンドはフロントエンド側に
テーブル全体の複製を取得しクライアント環境でファイルアクセスを実現するものです。
そのため、データベースとの接続がローカル/リモート接続に関わらずクライアントの
アクセス権によりファイル操作が行えます。
pg_copy_to(), pg_copy_from()はテーブルとのデータの遣り取りを配列を介してのみ
行えます。直接ファイルアクセスする機能は提供しません。
例1 PostgreSQLよりテーブルを取得しファイルへ書き込む
<?php
$conn = pg_connect("dbname=sample");
// "sample"という名前のデータベースに接続
if (!$conn) {
die("Can't connect DB server");
}
$rows = pg_copy_to($conn, "test");
// "test"という名前のテーブル全行を$rowsに配列として取得
pg_close($conn);
$fd = fopen("test.dat", "wb");
fwrite($fd, implode("\n", $rows));
// $rowsを"\n"(改行)で連結した文字列に変換しファイルへ出力する
fclose($fd);
?>
例2 PostgreSQLよりテーブルをCSV形式で取得しブラウザへ送信
<?php
$conn = pg_connect("dbname=sample");
// "sample"という名前のデータベースに接続
if (!$conn) {
die("Can't connect DB server");
}
$rows = pg_copy_to($conn, "test", ",");
// "test"という名前のテーブル全行を$rowsに配列として取得
// 区切り文字(delimiter)に","を指定
pg_close($conn);
$file = implode("\r\n", $rows);
// Windows9x/XP/NTの行末コードで連結
$file_size = strlen($file);
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: inline; filename=test.csv");
header("Content-Length: $file_size");
print $file;
}
?>
----
関数名
pg_copy_from
(PHP4 >= 4.2.0)
pg_copy_from -- 配列の要素をテーブルへ追加する
説明
int pg_copy_from(int connection_id, string table_name, array rows [, string delim [, string null_as]])
引数
connection_id
pg_[p]connect()により返されるPostgreSQLコネクションID
table_name
対象とするテーブル名
rows
テーブルへ追加する各行を保持する配列
delim
列を区切るための識別子
※任意の1バイト文字のみが指定可能(multibyte文字は未サポート)
※デフォルトは"\t"
nullas
NULL値の代替文字列を指定可能
※デフォルトは"\N"
戻り値
成功した場合はtrue、失敗時はfalseを返す。
更に詳細な情報は、pg_copy_to()を参照下さい。
例1 PostgreSQLに行を追加する
<?php
$conn = pg_connect("dbname=sample");
// "sample"という名前のデータベースに接続
$rows = array();
$rows[] = "data1,data2,data3"; // データは`,'区切り
$rows[] = "data4,data5,data6";
$rows[] = "data7,data8,data9";
pg_copy_from($conn, "test", $rows, ",");
// "test"という名前のテーブルに","区切りのデータを追加
pg_close($conn);
?>
例2 PostgreSQLにファイルの内容を追加する
<?php
$conn = pg_connect("dbname=sample");
// "sample"という名前のデータベースに接続
$rows = file("/tmp/file");
pg_copy_from($conn, "test", $rows);
pg_close($conn);
?>
---
ここまで