• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:csvファイルをMySQLにインポートしたい)

csvファイルをMySQLにインポートしたい

このQ&Aのポイント
  • phpでcsvファイルをMySQLにインポートするプログラムを作成しています。
  • 以下のソースを実行したところエラーが発生しました。
  • フォルダ(files)にcsvファイルがアップロードされているところまでは確認できましたが、MySQLにインポートされていないようです。

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

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

xamppでload data local がエラーになるのは知ってましたが、日本語で検索してもでてきませんねぇ。 http://osdir.com/ml/ProfessionalPHPDevelopers/2011-03/msg00043.html なにやら linux でも同じ問題があるらしい。 →検索キーワード「PDO, mysqlnd bug load」で漸く、、、 https://bugs.php.net/bug.php?id=54158 mysqli では問題ないので pdo_mysql の問題のようです。 どうやら、pdo_mysql driver の再コンパイルが必要らしい。 でもって、php5.4でも配布版では直ってないらしいです。上記ページの最後に以下の記述が!。 >I still seem to have this problem on: PHP 5.4.17-1~precise+1 Ubuntu 12.04 windows での再コンパイルは、Cのコンパイラー持ってないと無理なので 対策1:load だけ、mysqli でやってしまう 対策2:windowsのlocalhost なら、php側ファイルであっても、絶対パスにすれば、mysql serverからも読み込み可能なので、local はずして、実行させる。 emulation mode (オプションの PDO::MYSQL_ATTR_DIRECT_QUERY =>true またはこのキー省略)で実行すればいけます。PDO::MYSQL_ATTR_DIRECT_QUERY =>false にすると、windowsのversionによってはまた違うエラーが出たりして、pdo_mysqlのload文への対応おかしいです。 <?php // ファイル名を絶対パスにする。$fileに相対パスが入ってるとする。 $file = dirname(__FILE__) .DIRECTORY_SEPARATOR. $file;

参考URL:
https://bugs.php.net/bug.php?id=54158
do79tama13
質問者

お礼

返信が大変遅くなってしまい申し訳ございません。 mysqli関数での接続と、絶対パスでのsql文実行の両方の方法でコードを修正して実行してみましたが、インポートされませんでした。sql文の中身を試しにechoで出力し、そのsql文をコピーしてmysqlから実行してみたところインポートできました。という事はsql文は正しいようです。そうなるとおっしゃる通りphp側のバグという事になります。 悩み続けましたがやむおえずPHPのバージョン5.4.19とMySQLのバージョン5.5.32にそれぞれバージョンアップ、質問に記載したコードをそのままコピペしただけで実行できました。どうやらバージョンによっては不具合が生じるようです。 ともかく解決しましたので非常に助かりました。ご返信の内容の中には当方のほかのコードの参考になる内容(PDO接続の際のオプション記載について)も含まれていましたのでさっそく修正させていただきました。 ありがとうございました(#^.^#)

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ちょっと疑問なのですが わざわざmove_uploaded_file()しないで、テンポラリフォルダの中から csvファイルを取り込んでみては?

do79tama13
質問者

お礼

返信が大変おそくなって申し訳ございません。 move_uploaded_file()しないで直接一時フォルダから取り出す方法も試作してみましたが、うまくsql文が実行されませんでした。 結局PHPのバージョンを上げたことで解決いたしました。 一緒に考えていただけて感謝しております。ありがとうございました(*^^*)

関連するQ&A