このため、ローカルPCからインポートすることとなる。
なお、xserverはtelnet,SHが使えないので、シェルからのコマンドライン操作は不可能である。
従って、phpMyAdminを使うか、phpでプログラムを組んで実行することとなる。
■phpMyAdminを使う。(SQLコマンド)
"SQL"タブから下記コマンドを投入する。
LOAD DATA LOCAL INFILE "C:/temp/hoge.txt" INTO TABLE userID_dbName.tableName FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
"C:/temp/hoge.txt" は、
"C:\\temp\\hoge.txt"としても同じ。
入力ファイルが存在しているにも関わらず、「Not Found (Errcode 2)」エラーとなりLOADできない場合がある。
フィールド間の区切り文字指定として、"FIELDS TERMINATED BY ',' "は、入れたほうがよい。
指定がない場合、マルチバイト文字の部分が空白になることがある。
■phpMyAdminを使う。(インポート画面)
"インポート"タブから操作する。
インポートタブをクリックする前に、LOAD DATAするテーブルをクリックしないと、インポート可能なファイルにSQLのみ指定可能となるので注意。
・インポートするファイルの形式 : LOAD DATA する CSV
・LOAD DATA で CSV インポートするときのオプション : 入力ファイルに応じて設定する。
行の終端記号は、windowsで作成したファイルは、"\r\n" を指定する。
・行の終端記号のエラーでLOADがうまくいかない場合、"auto"を指定する。
・データ量が多いときは、分割してLOADすること。
■プログラムを実行する。
<?php
$file = '"C:/temp/hoge.txt"';
//DB接続
$sv = "localhost";
$dbname = "userID_dbName";
$user = "userid";
$pass = "hogehoge";
$conn = mysql_connect($sv, $user, $pass) or die("コネクトエラー");
mysql_select_db($dbname) or die("DBセレクトエラー");
mysql_query("SET NAMES utf8");
//CSVデータの取り込み
$sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE userID_dbName.tableName";
$sql .= " LINES ";
$sql .= " TERMINATED BY '\r\n' ";
$sql .= " IGNORE 1 LINES";
$result = mysql_query($sql, $conn);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sql;
die($message);
}
?>
参考:
■MySQL 4.1 リファレンスマニュアル :: 6.4.8 LOAD DATA INFILE 構文