簡體   English   中英

“1064 - 您的 SQL 語法有錯誤”當 LOAD DATA INFILE 帶有字段規范時

[英]“1064 - You have an error in your SQL syntax” when LOAD DATA INFILE with fields specification

我花了幾個小時在這個網站上閱讀可能超過 10 個不同的問答,並多次查看我的以下查詢,但仍然找不到問題所在。 這是我的PHP代碼中的查詢定義行:

$q="LOAD DATA INFILE '$filename' 
    IGNORE INTO TABLE `temp_data_1` 
    FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\' 
    LINES TERMINATED BY '\r\n' IGNORE 1 
    LINES (`field_1`, `field_2`, `field_3`, `field_4`, `field_5`, 
            `field_6`, `field_8`, `field_9`) 
        SET `field_7` = SUBSTRING_INDEX(`field_6`, '.',-1)";

$filename在上傳CSV文件后設置。 非常相似的代碼在phpMyAdmin中工作,但我無法在我的PHP代碼中工作。 我不斷收到此錯誤:

1064 - 您的 SQL 語法有錯誤; 查看與您的 MySQL 服務器版本相對應的手冊,以了解在第 2 行的 '' IGNORE 1 LINES ( field_1 , field_2 , field_3 , field_4 , field_5 , field_6 , ' 附近使用的正確語法

我懷疑它與LINES TERMINATED BY '\r\n'有關,但我看不出有任何問題,因為完全相同的行終止定義正在代碼的其他部分工作。

謝謝您的幫助。

簡單的測試,只需編寫一個小腳本並在 CLI 中運行它,看看是什么從您的字符串中獲取了 output。

$filename = 'dsafsdf';

$q="LOAD DATA INFILE '$filename' 
    IGNORE INTO TABLE `temp_data_1` 
    FIELDS TERMINATED BY ',' ENCLOSED BY '\\\"' ESCAPED BY '\\\' 
    LINES TERMINATED BY '\\r\\n' IGNORE 1 
    LINES (`field_1`, `field_2`, `field_3`, `field_4`, `field_5`, 
            `field_6`, `field_8`, `field_9`) 
        SET `field_7` = SUBSTRING_INDEX(`field_6`, '.',-1)";
echo $q;

output 是

LOAD DATA INFILE 'dsafsdf' 
    IGNORE INTO TABLE `temp_data_1` 
    FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\' 
    LINES TERMINATED BY '
' IGNORE 1 
    LINES (`field_1`, `field_2`, `field_3`, `field_4`, `field_5`, 
            `field_6`, `field_8`, `field_9`) 
        SET `field_7` = SUBSTRING_INDEX(`field_6`, '.',-1)

請注意缺少的\已被解釋為 excape 字符,因為您在雙引號字符串中。 所以你現在需要做的就是添加相關數量的轉義以獲得正確的 output 像這樣

$q="LOAD DATA INFILE '$filename' 
    IGNORE INTO TABLE `temp_data_1` 
    FIELDS TERMINATED BY ',' ENCLOSED BY '\\\"' ESCAPED BY '\\\' 
    LINES TERMINATED BY '\\r\\n' IGNORE 1 
    LINES (`field_1`, `field_2`, `field_3`, `field_4`, `field_5`, 
            `field_6`, `field_8`, `field_9`) 
        SET `field_7` = SUBSTRING_INDEX(`field_6`, '.',-1)";
echo $q;

產生預期的結果

LOAD DATA INFILE 'dsafsdf' 
    IGNORE INTO TABLE `temp_data_1` 
    FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\' 
    LINES TERMINATED BY '\r\n' IGNORE 1 
    LINES (`field_1`, `field_2`, `field_3`, `field_4`, `field_5`, 
            `field_6`, `field_8`, `field_9`) 
        SET `field_7` = SUBSTRING_INDEX(`field_6`, '.',-1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM