0

すでに数時間検索しましたが、うまくいきません。

大統領のcsvファイルがあります。最初の行はヘッダーです。

Presidency ,President ,Wikipedia Entry,Took office ,Left office ,Party ,Portrait,Thumbnail,Home State

Presidency、、、だけの関係を作りPresidentたいParty

$sqlquerycreate1 = "CREATE TABLE IF NOT EXISTS `sample1` (
  `Presidency`  VARCHAR(30),
  `President` VARCHAR(30),
  `Party` VARCHAR(30)
)";
mysql_query($sqlquerycreate1);

# download the file off the internet
$file = file_get_contents("http://localhost/sample.csv");
$filepath = "sample.csv";
file_put_contents($filepath, $file);

# load the data into nycgrid table
$pt11 = "LOAD DATA LOCAL INFILE ";
$pt21 = "'C:/xampp/htdocs/test/file/sample.csv' INTO TABLE sample1(Presidency,President,@Wikipedia Entry,@Took office ,@Left office ,Party,@Portrait,@Thumbnail,@Home State) ";
$pt31 = "FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ";
$pt41 = "LINES TERMINATED BY '\r\n' ";
$pt51 = "IGNORE 1 LINES";
$sqlquerynew1 = $pt11.$pt21.$pt31.$pt41.$pt51;
mysql_query($sqlquerynew1);

動作しません。テーブルは作成されますが、データはロードされません。なぜですか?ありがとう。


mysql> LOAD DATA LOCAL INFILE 'C:/xampp/htdocs/sample.csv' INTO TABLE sample1(Pr
esidency, President, @x, @x, @x, Party, @x, @x, @x) FIELDS TERMINATED BY ',' ENC
LOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;


ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'FIELD
S TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINE' at
line 1
4

1 に答える 1

5

LOAD DATAステートメント に構文エラーがあります。特に:

  1. マニュアルに記載されているように:

    ユーザー変数は、として記述されます@var_name。ここで、変数名var_nameは英数字、「<code>。」、「<code> _」、および「<code>$」で構成されます。ユーザー変数名は、文字列または識別子として引用符で囲む場合、他の文字を含めることができます(たとえば@'my-var'、、、@"my-var"または@`my-var`

    したがって、、、およびという名前の変数はすべて@Wikipedia Entry構文的に正しくありません。空白を削除するか、変数名を引用符で囲む必要があります。@Took office@Left office@Home state

    ただし、他の場所で参照する場合を除いて、異なる変数名を使用する必要はありません。マニュアルに記載されているように:

    入力値をユーザー変数に割り当て、変数をテーブル列に割り当てないことで、入力値を破棄することもできます。

    LOAD DATA INFILE 'file.txt'
      INTO TABLE t1
      (column1, @dummy, column2, @dummy, column3);
    
  2. FIELDSLINESおよびIGNORE句はすべてリストの前に置く必要があります。マニュアルに記載されているように、構文は次のとおりです。

    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
        [REPLACE | IGNORE]
        INTO TABLE tbl_name
        [CHARACTER SET charset_name]
        [{FIELDS | COLUMNS}
            [TERMINATED BY 'string']
            [[OPTIONALLY] ENCLOSED BY 'char']
            [ESCAPED BY 'char']
        ]
        [LINES
            [STARTING BY 'string']
            [TERMINATED BY 'string']
        ]
        [IGNORE number LINES]
        [(col_name_or_user_var,...)]
        [SET col_name = expr,...]

したがって、次のことを簡単に行うことができます。

LOAD DATA LOCAL INFILE 'C:/xampp/htdocs/test/file/sample.csv'
    INTO TABLE sample1
    FIELDS
        TERMINATED BY ','
        ENCLOSED BY '\"'
    LINES
        TERMINATED BY '\r\n'
    IGNORE 1 LINES
    (Presidency, President, @x, @x, @x, Party, @x, @x, @x)
于 2012-05-20T09:29:16.397 に答える