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生成されたcsvでこの1列を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 に答える