Php 以-MySQL结尾的行和字段有多种可能

Php 以-MySQL结尾的行和字段有多种可能,php,mysql,csv,Php,Mysql,Csv,我正在尝试在我的内容管理系统中创建一个功能,用户可以上传一个CSV文件,然后对其进行解析,并将数据放入MySQL数据库。为此,我使用一个文件输入和这个SQL查询 $sql = "LOAD DATA LOCAL INFILE '".$_FILES["file"]["tmp_name"]."' INTO TABLE persons FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r'

我正在尝试在我的内容管理系统中创建一个功能,用户可以上传一个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
文件工作?(例如\n\r\n,)

尝试
以'\r\n'结尾的行。

这将适用于以“\r\n”结尾的文件,但也适用于以“\r”和“\n”结尾的文件。从MySQL文档:

以结尾的字段、以开头的行和以结尾的行 值可以是多个字符。例如,写行 由回车/换行符对终止,或读取 包含这些行的文件,请指定以“\r\n”结尾的行 条款

[已编辑]

您还需要将
\r\n
添加到以结尾的子句
字段中,以便告诉解析器不要在第一行的最后一个字段中包含行尾符号。所以

字段以“;”结尾\t\r\n'


在大多数情况下都有效。

有不同类型的CSV。。因此,除非您让用户决定字段的分隔方式以及行的分隔方式,否则无法知道。谢谢您的回答!不过,您给出的两种解决方案似乎都不起作用。知道为什么吗?你是对的。我已经修改了答案。我认为问题出在以
结尾的子句
字段中,遗憾的是,这似乎也不起作用。谢谢你的努力!这个解决方案可以很好地处理“\r\n”和“\n”类型的文件(它们是大多数文件)。类型为“\r”的文件有问题。我建议在运行sql
LOAD DATA
之前,先使用
dos2unix
(系统命令)删除'\r'