「一気に最後まで読んだ」本、教えて下さい!

こんにちわ。
現在、XAMPP(1.6)にて開発をおこなっています。
MySQL Ver 5.0.51
PHP 5.2.5


Web上からcsvファイルを参照して、作成してあるDB(フィールド数32)へアップロードを
おこないたいのですが、タイムアウトエラーになってしまいます。

アップするCSVファイルが54M(8万行)ほどあるため、php.ini「uplaod_max_file_size」
増やしてみたり、タイムアウト時間を長くしてみても、INSERTではタイムアウトになって
しまいます。

そのため、LOADで読込もうとしたのですが以下のようなエラーになってしまいます。
PHP初めてで'や"の使い方が間違っているのかも知れませんが、どこが間違っているのか
教えていただけますでしょうか?

↓エラー文
Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\dmti.php on line 24


↓実行文(24行目前後)$polはテーブル名
mysql_query("set names sjis");
$sql ="load data infile '$fl' into tabale $pol fields terminated by ',' enclosed by '"' lines terminated by '\r\n';"
$ret = mysql_query($sql, $db);
if($ret){
print mysql_num_rows($db)."件の登録を完了しました。.<br><br>";
$body = "<br><br>
<input type='button' value='次へ' onclick='window.location=\"news.php\"'>
<input type='button' value='ホームへ戻る' onclick='window.location=\"index.htm\"'>";

}else{
print "登録に失敗しました。";
$body .= "<br><br>
<input type='button' value='戻る' onclick='history.back()'>
<input type='button' value='ホームへ戻る' onclick='window.location=\"index.htm\"'>";
}

以上、宜しくお願い致します。

A 回答 (3件)

>$sql ="load data infile '$fl' into tabale $pol fields terminated by ',' enclosed by '"' lines terminated by '\r\n';"



enclodes by のあとで、二重引用符の中で二重引用符が出てきてしまいますよね?キチンとescapeしてください。

  http://www.php.net/manual/ja/language.types.stri …

$sql ="load data infile '$fl' into tabale $pol fields terminated by ',' enclosed by '\"' lines terminated by '\r\n';"


というか54MBのファイルをhttpでアップロードというのはいくらなんでも無謀な気はします。とりあえずテストは少量のデータで行ってみてください(問題の切り分けが出来なくなりそうなので・・)。
    • good
    • 0
この回答へのお礼

shimixさん

ありがとうございます。
10件ほどのテストファイルで試してみましたが、失敗してしまいました...他に原因があるようですので調べてみます。

コマンドプロンプトなどをまったく触ったことのない人間がデータを触るのでhttpからと思ったのですが。。。

お礼日時:2008/02/26 17:09

loadにするにしても、「アップロードして所定の名前で保存」までで一度htmlを返して、ボタンか何かで「loadのSQL文を投げる」ように処理を分けた方がインタフェイスとしてはいいと思います。

アップロードのPOSTのまま待つと余計に待ちが長く感じるので。

同様に、insertでも途中経過を(xxx件追加しましたを何件かおきに)表示してやればいいように思います。出力制御系の関数で出来ます。

  http://d.hatena.ne.jp/shimooka/20070426/1177571621

ob_flushする前に(ブラウザがバッファしないように)空白をたくさんprintしておくのが技ですかね(汗

この回答への補足

shimixさん

ありがとうございます。
ob_flush なものがあるんですね。
先ほどのものも登録に3分かかり、その後DBを除いたところ、なぜか93件の漏れが・・・

コマンドプロンプトからだと漏れないんですが、色々と調べる箇所が
あるようです。

DB登録後に計算式をあてはめて、csvとして吐き出したいのですが、まだまだ先は流そうです。

補足日時:2008/02/26 22:11
    • good
    • 0

>10件ほどのテストファイルで試してみましたが、失敗してしまいました...


>他に原因があるようですので調べてみます。

とりあえずは$sqlにセットした内容をprint $sqlで確認して、同じような内容がSQL文単独で実行可能かどうかチェックしてくださいね。私は投げたことがないSQL文のときは、必ずphpMyAdminなどで投げてみてからphpに組み込みます(小心者なので・・)。

54MBは・・ファイルの転送だけFTPにするとか、HTTPのままとしてもZIPにして(テキストなので劇的に減るはず)でアップロードしてサーバ側で展開して使うとか、何か考えたほうがいいでしょうねぇ。
    • good
    • 0
この回答へのお礼

shimixさん

度々ありがとうございます。
配列の状態でタイムアウトを3分にしたところ、登録はできました。。。が3分は実用レベル的に問題があるので、やはりloadで色々試してみます。

お礼日時:2008/02/26 18:37

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


おすすめ情報