• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPからMySQL CSVファイルのアップロード)

PHPからMySQL CSVファイルのアップロード

このQ&Aのポイント
  • XAMPP(1.6)を使用してPHPからMySQLにCSVファイルをアップロードしようとしています。しかし、54MBのCSVファイルをアップロードする際にタイムアウトエラーが発生してしまいます。
  • タイムアウト時間やphp.iniの設定変更を試しても解決せず、そのためLOADコマンドを使用しようとしましたが、構文エラーが発生してしまいます。
  • 「unexpected T_VARIABLE」というエラーメッセージが表示され、24行目付近に構文エラーがあることがわかります。正しいCSVファイルの読み込み方法を教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>$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.string.php#language.types.string.syntax.double $sql ="load data infile '$fl' into tabale $pol fields terminated by ',' enclosed by '\"' lines terminated by '\r\n';" というか54MBのファイルをhttpでアップロードというのはいくらなんでも無謀な気はします。とりあえずテストは少量のデータで行ってみてください(問題の切り分けが出来なくなりそうなので・・)。

k1227_001
質問者

お礼

shimixさん ありがとうございます。 10件ほどのテストファイルで試してみましたが、失敗してしまいました...他に原因があるようですので調べてみます。 コマンドプロンプトなどをまったく触ったことのない人間がデータを触るのでhttpからと思ったのですが。。。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

loadにするにしても、「アップロードして所定の名前で保存」までで一度htmlを返して、ボタンか何かで「loadのSQL文を投げる」ように処理を分けた方がインタフェイスとしてはいいと思います。アップロードのPOSTのまま待つと余計に待ちが長く感じるので。 同様に、insertでも途中経過を(xxx件追加しましたを何件かおきに)表示してやればいいように思います。出力制御系の関数で出来ます。   http://d.hatena.ne.jp/shimooka/20070426/1177571621 ob_flushする前に(ブラウザがバッファしないように)空白をたくさんprintしておくのが技ですかね(汗

k1227_001
質問者

補足

shimixさん ありがとうございます。 ob_flush なものがあるんですね。 先ほどのものも登録に3分かかり、その後DBを除いたところ、なぜか93件の漏れが・・・ コマンドプロンプトからだと漏れないんですが、色々と調べる箇所が あるようです。 DB登録後に計算式をあてはめて、csvとして吐き出したいのですが、まだまだ先は流そうです。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>10件ほどのテストファイルで試してみましたが、失敗してしまいました... >他に原因があるようですので調べてみます。 とりあえずは$sqlにセットした内容をprint $sqlで確認して、同じような内容がSQL文単独で実行可能かどうかチェックしてくださいね。私は投げたことがないSQL文のときは、必ずphpMyAdminなどで投げてみてからphpに組み込みます(小心者なので・・)。 54MBは・・ファイルの転送だけFTPにするとか、HTTPのままとしてもZIPにして(テキストなので劇的に減るはず)でアップロードしてサーバ側で展開して使うとか、何か考えたほうがいいでしょうねぇ。

k1227_001
質問者

お礼

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

関連するQ&A