当带有字段说明的LOAD DATA INFILE时,“ 1064-您的SQL语法有错误”

我花了几个小时在这个网站上阅读了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服务器版本相对应的手册,以在''IGNORE 1 LInesfield_1field_2field_3field_4,{{1 }},field_5,'位于第2行

我怀疑它与field_6有关,但我认为它没有任何问题,因为完全相同的行终止定义正在代码的其他部分起作用。

感谢您的帮助。

iCMS 回答:当带有字段说明的LOAD DATA INFILE时,“ 1064-您的SQL语法有错误”

简单的测试,只需编写一个小脚本并在CLI中运行它即可查看从您的字符串中获取什么。

$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;

输出为

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`,-1)

请注意缺少的\,因为您在双引号中,所以已解释为exape字符。因此,您现在要做的就是添加相应的转义数,以获取正确的输出

$q="LOAD DATA INFILE '$filename' 
    IGNORE INTO TABLE `temp_data_1` 
    FIELDS TERMINATED BY ',-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`,-1)
本文链接:https://www.f2er.com/2040329.html

大家都在问