Php 以-MySQL结尾的行和字段有多种可能
我正在尝试在我的内容管理系统中创建一个功能,用户可以上传一个CSV文件,然后对其进行解析,并将数据放入MySQL数据库。为此,我使用一个文件输入和这个SQL查询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'
$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”的文件有问题。我建议在运行sqlLOAD DATA
之前,先使用dos2unix
(系统命令)删除'\r'