[PHP-users 5297] アップロードしたファイルからpg_put_lineを利用してのDB挿入。
mots
php-users@php.gr.jp
Thu, 7 Feb 2002 19:24:51 +0900
こんばんは。
ブラウザからcsvファイルをアップロードして、
そのデータをpg_put_lineを利用してDB挿入を試みているのですが、
一部のカラムに対するデータ挿入が完全ではありません。
どなたが御教授頂けますでしょうか。どうぞ宜しくお願い致します。
【CSVファイル】5行
10,20
30,40
50,60
70,80
90,100
【pg_put_line】
@pg_exec($con, "COPY id FROM stdin"); //idはテーブル名
$b = "1013070721"; // mktimeで取得
foreach($file as $line) {
// $fileはアップロードされたCSVファイルをfile関数で読みこみ
$tmp = explode(",", $line);
pg_put_line($con, sprintf("%d\t%d\t%d\n", $tmp[0], $tmp[1], $b)); // #1
//pg_put_line($con, sprintf("%s\t%s\t%d\n", $tmp[0], $tmp[1], $b)); // #2
}
pg_put_line($con, "\\.\n");
pg_end_copy($con);
この様なコード(一部略)で、
本来アップロードしたいCSVには”数字だけではなく英字も入る”のですが、
その際に#2のようにsprintfの型指定子を%s(文字列)に替えて実行すると
以下のようにデータベース挿入に問題が起こります。
※数値データはうまくいくのですが、英数字のデータが入るとダメなのです…。
※ %d の型指定子は、10進数整数。
id | pw | time
------------+------------+------
| 20
| 1013070655 |
| 40
| 1013070655 |
| 60
| 1013070655 |
| 80
| 1013070655 |
| 100
| 1013070655 |
(10 rows)
※テーブルは、id (text),pw (text),time (int4)となっております。
PHP-4.1.1
postgresql-7.1.3-patched-20011205
Apache1.3.22