我正试图在我的内容管理系统中创建一个功能,用户可以在其中上传CSV文件,然后对其进行解析,并将数据放入MySQL数据库中。为此,我使用了一个文件输入和这个SQL查询。
$sql = "LOAD DATA LOCAL INFILE '".$_FILES["file"]["tmp_name"]."'
INTO TABLE persons
FIELDS TERMINATED BY ';'
LINES TERMINATED BY 'r'
(id, name, email, contacts)";
这非常适用于我在计算机上创建的.csv
文件,但并非所有CSV文件都有以分号结尾的字段和以r
结尾的行。现在,我希望此查询适用于所有.csv
文件。否则,这个功能将无法很好地在我的CMS中实现。有没有什么方法可以让它适用于具有其他字段和行结尾的.csv
文件?(例如,\r\n,)
尝试LINES TERMINATED BY 'rn'
这将适用于以"\r\n"结尾的文件,也适用于以'\r'和'\n'结尾的文件。来自MySQL文档:
终止于的字段、起始于的行和终止于的行值可以是多个字符。例如,要写入行由回车/换行对终止,或读取包含此类行的文件,请指定lines TERMINATED BY"\r\n"条款
[编辑]
您还需要将rn
添加到子句FIELDS TERMINATED BY
中,以便告诉解析器不要在第一行的最后一个字段中包含行尾符号。所以
FIELDS TERMINATED BY ';, trn'
在大多数情况下都有效。