[英]“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.