3

可能重复:
将 MySQL 查询转换为 CSV 的 PHP 代码

您好我正在从用“,”逗号分隔的 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";
        }
        返回 $outstr;

现在我的问题是什么。如果任何列数据本身具有“,”逗号,则它将这 1 列拆分为 2 列。例如,如果我的列workdesc有这样的数据,I worked on this,that,these and those那么它将把这 1 列放到生成的 csv 中的 3 列。任何人都可以告诉我如何摆脱这种情况......

4

3 回答 3

7

为了构建 CSV 文件,您不应使用字符串连接。

相反,您应该使用该fputcsv()函数——如果您不想写入文件,但得到一个字符串,请查看用户 说明,您会在其中找到几种可能的解决方案;-)


使用该功能,您不必自己处理转义外壳或分隔符:所有这些都已经为您完成。

于 2011-04-01T10:58:43.903 回答
2

您必须将值放在引号中,如下所示

$outstr .='"'.$username->username.'",'; //output ://"somvalue contain , comma"

将此格式应用于所有数据列,仅此而已。

于 2011-04-01T10:58:18.100 回答
1

如果列数据本身有逗号,那么您应该使用双引号将其转义。

例如,如果您的 columndata = "some,data"; 那么你的 csv 应该看起来像 -

col1,col2,"some,data",col4

所以最好为您的列数据加上双引号。

于 2011-04-01T10:58:37.803 回答