这是简单的代码
$loadsql = "LOAD DATA LOCAL INFILE '$target_path'
INTO TABLE `test`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES";
$result = mysql_query($loadsql);
代码运行良好。但我只是好奇如何知道 csv 中是否有一行错误,它是哪一行?
http://dev.mysql.com/doc/refman/5.1/en/load-data.html
使用 LOAD DATA LOCAL INFILE,数据解释和重复键错误会变成警告并且操作会继续,因为服务器无法在操作过程中停止文件传输。对于重复键错误,这与指定 IGNORE 相同。本节稍后将进一步解释 IGNORE。
您确定没有报告警告吗?要查看它们,请尝试SHOW WARNINGS
在您的 mysql 控制台中使用。
PS/警告附加到会话- 您只能从加载数据文件的会话中显示它们。
PS2/ 就像在c中一样,MySQL警告与错误不同,因为它们不会停止当前操作。但它们通常表明出了问题,应该对其进行调查。至于 的具体情况LOAD DATA INFILE
,正如文档中明确指出的那样,报告警告而不是错误的选择仅取决于服务器在文件传输启动后没有(优雅的)方式来停止文件传输的事实。