您好我正在用“,”逗号分隔的mysql记录生成一个csv文件。我从数据库中获取数据并将其连接成一个字符串。我正在使用以下代码
for($i=0;$i<count($all_logs);$i++) { $rd=$project->fetchRow($project->select()->where('id='.$all_logs[$i]->user2project_id)); $username=$userid->fetchRow($userid->select()->where('id='.$all_logs[$i]->user_id)); $outstr .=$all_logs[$i]->log_date.","; $outstr .=$username->username.","; $outstr .=$rd->title.","; $outstr .=$all_logs[$i]->task.","; $outstr .=$all_logs[$i]->workdesc.","; $outstr .=$all_logs[$i]->hours.","; $outstr .="\n"; } return $outstr;
现在我的问题是什么。如果任何列数据本身具有“,”逗号,则它将此1列拆分为2列。例如,如果我的列workdesc
具有此I worked on this,that,these and those
之类的数据,那么它会将此1列放入生成的csv中的3列。任何人都可以告诉我如何摆脱这种情况......
答案 0 :(得分:7)
为了构建CSV文件,不应使用字符串连接。
相反,您应该使用fputcsv()
函数 - 如果您不想scrite到文件,但得到一个字符串作为结果,请查看users {{3在其中,您将找到几种可能的解决方案; - )
使用该功能,您不必处理转出机箱或自行分隔:所有这些都已经为您完成。
答案 1 :(得分:2)
您必须将值放在引号中
$outstr .='"'.$username->username.'",'; //output ://"somvalue contain , comma"
在所有数据列上应用此格式,就是这样。
答案 2 :(得分:1)
如果列数据本身有逗号,那么您应该使用双引号来转义它。
例如,如果你的columndata =“some,data”;那你的csv应该看起来像 -
col1,col2,"some,data",col4
最好为列数据附上双引号。