【发布时间】:2015-06-01 21:22:47
【问题描述】:
我正在从 CSV 文件中导入以下数据,我完全无法控制其格式:
CampaignName,"""keyword""",441,11683,3.77%,2.99,112.82,"1,318.02",1.7,12,109.84
如您所见,其中一个字段有一个带有逗号分隔符的长数字,尽管该值包含在“...”中
使用以下代码将数据导入 SQL:
while (($data = fgetcsv($handle)) !== FALSE) {
$import="INSERT into ".$date."_keywords(Campaign,Keyword,Clicks,Impressions,CTR,CPC,CPM,Cost,Position,Conversions,Cost_per_conv) values('$data[0]','".mysql_real_escape_string($data[1])."','".mysql_real_escape_string($data[2])."','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]')";
mysql_query($import) or die(mysql_error());
}
即使长数字在引号内,fgetcsv 似乎也无法处理它,因此将数字保存为 $1 并删除其余的引用文本。
它确实正确地选取了所有剩余的字段 - 所以它似乎不仅仅是假设 , 是一个分隔符,而 318.02 是下一个值。
问题是,如何获取完整号码以添加到数据库中?
编辑:我已经阅读了关于在 CSV 文件中处理逗号的另一个线程,并且该文件已经包含该线程所建议的双引号中的数据,所以这不是问题。
【问题讨论】:
-
fgetcsv() 有一堆额外的参数来定义分隔符、引号等......使用它们。
-
我尝试使用如下的附件参数:while (($data = fgetcsv($handle, 1000, ",", "\"")) !== FALSE) { 没有区别
-
也试过了:while (($data = fgetcsv($handle, 0, ",", '"')) !== FALSE) { ......还是不行不同...它的价值为 $1 并忽略 ,318.02
-
你确定SQL中的数据类型是正确的吗?你把它设置成什么?