さくらインターネットのサーバーから、

CSVファイルをLOAD DATA INFILEするために、以下のPHPスクリプトを作りました。

$s = mysql_connect('mysqlxxx.db.sakura.ne.jp', 'user', 'password', true, 128);
mysql_select_db("user", $s);

$sql = "LOAD DATA LOCAL INFILE '/home/user/www/File.csv' REPLACE
      INTO TABLE `ItemInfo` FIELDS TERMINATED BY ','"";
$query = mysql_query($sql);

私のサーバーでは『2027: Malformed packet』エラーが出ましたが、
友人のさくらサーバー上では、処理に成功しました。
(私のサーバーのDBのバージョンは5で、友人が4です。)

友人のさくらサーバーでは処理に成功したことから、
私のサーバーで出た2027: Malformed packetエラーの原因はCSVファイルの形式等ではなく
もっと基幹的な部分にあるとおもうのですが、
どなたか、原因・解決法をご教授いただきたいです。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/03 21:33:01
  • 終了:2010/03/04 20:48:54

回答(3件)

id:GreenStar No.1

GreenStar回答回数192ベストアンサー獲得回数462010/03/03 21:45:02

ポイント40pt

文字コードの違いを見てみると幸せになれるかも?

show variables like "char%"

4と5だとLOAD DATAの挙動がちがうからマニュアルも見て!!

http://dev.mysql.com/doc/refman/4.1/ja/load-data.html

http://dev.mysql.com/doc/refman/5.1/ja/load-data.html

こんなことしか書けなくて、ごめんなさい。

id:km1967 No.2

km1967回答回数541ベストアンサー獲得回数402010/03/03 21:45:40

ポイント20pt

$sql = "LOAD DATA LOCAL INFILE '/home/user/www/File.csv' REPLACE

      INTO TABLE `ItemInfo` FIELDS TERMINATED BY ','"";

ここが途中で改行しているため。

1行で書かなければいけない

id:Cside

回答ありがとうございます。

1行にしましたが、同じエラーのままのようです。

2010/03/03 21:49:03
id:bayan No.3

bayan回答回数100ベストアンサー獲得回数132010/03/04 01:35:08

ポイント20pt

こちらは参考になりますか?

http://d.hatena.ne.jp/Cside/20100227/p1

id:Cside

これ書いたの、私ですね…w

これはsshから実行した話ですね。

sshからは、-enable-local-infileオプションでLOCAL INFILEの権限を取って実行したら成功しました。

今回のPHPスクリプトでは、LOCAL INFILEの権限をmysql_connectの$client_flagsを128(CLIENT_LOCAL_FILES)にすることで取っています。

しかし、それでも起きてるエラーなのですよね。

2010/03/04 08:01:48
  • id:Cside
    【補足】
    ・ちなみに http://q.hatena.ne.jp/1267546509 の質問の続きになります。
    ・友人には、全く同じテーブルを作成してもらい、CSVファイルはまったく同じものを私が友人に送って、それを使って実行してもらいました。
    ・類似質問 http://q.hatena.ne.jp/1240681560 も参考にしましたが、ここで指摘されているように改行コードや区切り、文字コード等を色々変更して試してみましたが、やはり#2027: Malformed packetエラーが出てしまいます。
  • id:rouge_2008
    新規にテーブルを作り直して試すとどうなりますか?
  • id:karuishi
    $sql = "LOAD DATA LOCAL INFILE '/home/user/www/File.csv' REPLACE INTO TABLE `ItemInfo` FIELDS TERMINATED BY ','"";
    最後に"が2つなのはtypoですよね?
  • id:Cside
    >karuishiさん
    その通りです、typoです。失礼しました、ご指摘ありがとうございます。
  • id:Cside
    >rouge_2008さん
    ありがとうございます。作り直して再びスクリプトを実行してみましたが、同じ結果のようでした。
  • id:bayan
    あいやー、自分の貼ったURLは質問者さんのダイヤリーじゃないですか。
    ということは解決には至っていないのですね。。。
    いらん回答してすみませんでした。
  • id:Cside
    いえいえ、調べていただきありがとうございます。
  • id:Cside
    LOAD DATA INFILEをmysqlimportで代用したところ実行に成功したので、質問を終了させていただきます。
    (詳細: http://d.hatena.ne.jp/Cside/20100304/p1 )

    数々のご意見、とても参考になりました。ありがとうございました。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません