QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

mysqlへphpを使ってcsvファイルをインポートするには

LOAD DATA LOCAL INFILE '/root/data.csv' REPLACE INTO TABLE mytable FIELDS TERMINATED BY ',' ENCLOSED BY '"' ;
によって、コンソールからはインポートできましたが
php ではうまくいきません 

$conn=mysql_connect("localhost","root","abcd");
mysql_select_db("test",$conn);
$sql="LOAD DATA LOCAL INFILE '/root/data.csv' REPLACE INTO TABLE mytable FIELDS TERMINATED BY ',' ENCLOSED BY '"'";
$res=mysql_query($sql,$conn);
mysql_close($conn);

"のところに\エスケープさせてみたりはしたのですが、、、うまくいきません
ご教授ください。

質問者:zzfou

回答

load.php

<?php
//    mb_internal_encoding("EUC-JP");
//    i18n_http_input("EUC-JP");
//    i18n_http_output("EUC-JP");

    $inif = "./data.csv";

    if(file_exists($inif)){
        system("dos2unix $inif data.tmp");
        rename("./data.tmp", $inif);
    }
    else {
        echo <<<END
        <html>
        <body>
        <meta http-equiv="content-type" content="text/html; charset=euc-jp">
        <title>File Not Found</title>
        <head><h1><center>ログファイルが見つかりません。</center></h1></head>
        <form action="./index.htm" method=GET>
        <input type=submit name=submit value=戻る>
        </form>
        </body>
        </html>
END;
        exit;
    }

    if($flag == "on"){
        $fp = fopen("$inif", "r");
        $cnt = 1;

        $conn = mysql_connect("localhost", "user", "passwd");
        if(!$conn){
            die("mysql_connect() error occured.");
        }

        $db = mysql_select_db("db_name", $conn);
        if(!$db){
            die("Base de donn? es CONNECTABLE mysql_select_db()");
        }

        while(!feof($fp)){
            $buf = fgets($fp, 2048);
            list($f1,$f2,$f3,$f4,$f5) = preg_split("/,/", $buf);
            if($f1 == "" && $f2 == "" && $f3 == "" && $f4 == "" && $f5 == "") break;
            else {
                 if($f1 == ""){
                     echo $cnt . " 行目、フィールド1が存在しません。";
                 }
                 elseif($f2 == ""){
                     echo $cnt . " 行目、フィールド2が存在しません。";
                 }
                 elseif($f3 == ""){
                     echo $cnt . " 行目、フィールド3が存在しません。";
                 }
                 elseif($f4 == ""){
                     echo $cnt . " 行目、フィールド4が存在しません。";
                 }
                 elseif($f5 == ""){
                     echo $cnt . " 行目、フィールド5が存在しません。
";
                 }
            }

            $sql = "insert into table values ('$f1',$f2,$f3,$f4,$f5)";
            $res = mysql_query($sql);
            if(!$res){

                echo "<html>";
                echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=euc-j
p\">";
                echo "<title>登録失敗</title>";
                echo "sql:".$sql;
                echo "<head><center><h1>テキストデータの登録に失敗しました。</h1></center>
</head>";
                echo "<body>";
                echo "<form action=\"./index.htm\" method=get>";
                echo "<input type=submit value=戻る>";
                echo "</form>";
                echo "</body>";
                echo "</html>";

                mysql_close($conn);

                exit;
            }

            $cnt++;
        }

        mysql_close($conn);
        fclose($fp);

        echo <<<END
        <html>
        <meta http-equiv="content-type" content="text/html; charset=euc-jp">
        <title>登録完了</title>
        <head><h1><center>登録完了</center></h1></head>
        <body>
        <form action="./index.htm" method=GET>
        <input type=submit name=submit value=戻る>
        </form>
        </body>
        </html>
END;
        exit;
    }
?>

<html>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<title>ログロード</title>
<head><h1><center>ログファイルをDBにロードします。</center></h1></head>
<body>
<form action=./load.php method=POST>
<input type=hidden name=flag value=on>
<?php
    echo "<center>ファイル $inif をDBにロードします。</center>";
?>
<center>よろしいですか?</center>

<input type=submit name=submit value=実行>
</form>
<form action=./index.htm method=get>
<input type=submit name=back value=戻る>
</form>
</body>
</html>

一行一行 Insert してます。

投稿者:コブラ

編集 履歴 (0)
Watch

この質問への回答やコメントをメールでお知らせします。

この質問に回答する


この質問の答えをご存知ですか? ぜひ質問者に伝えてあげてください (サインインすると、回答フォームが表示されます)。

サインイン