Создание файла CSV из таблицы MySQL с использованием php - PullRequest
0 голосов
/ 06 апреля 2011

этот код создает CSV-файл.Однако я избегал распечатывать запятые в полях, потому что они используются в качестве разделителя (см. Строку 22).Теперь я хочу удалить (возврат каретки и новые строки) из полей.Добавление $ somecontent. = Str_replace ("\ n", "", $ val);на линии 23, похоже, не работает.есть идеи?

@chmod($export_csv, 0777);
    $fe = @fopen($export_csv."/export.csv", "w+");
    if($fe){           
        $somecontent = "";
        $fields_count = 0;
        // print field headers
        $db->query($sql_view);
        if($row = $db->fetchAssoc()){
            foreach($row as $key => $val){
                if($fields_count++ > 0) $somecontent .= ",";
                $somecontent .= ucfirst($key);
            }
        }
        $somecontent .= "\n"; 

        // print field values
        $db->query($sql_view);
        while($row = $db->fetchAssoc()){
            $fields_count = 0;
            foreach($row as $key => $val){
                if($fields_count++ > 0) $somecontent .= ",";
                $somecontent .= str_replace(",", "", $val);
                $somecontent .= str_replace("\n", "", $val);
            }
            $somecontent .= "\n";                    
        }

        // write some content to the opened file.
        if (fwrite($fe, $somecontent) == FALSE) echo 'file_writing_error'." (export.csv)"; 
        fclose($fe);
    }

Ответы [ 4 ]

2 голосов
/ 06 апреля 2011

Используйте функцию fputcsv для записи файлов CSV.В PHP уже есть функция для записи CSV-файлов.

Вам не нужно обрабатывать экранирование, разделять самостоятельно все эти уже обработанные.

Это будет обрабатывать все эти вещи для вас и избавит вас от многих головных болей.

1 голос
/ 06 апреля 2011

Вы можете сделать это из MySql напрямую :

SELECT col1, col2, col3 INTO OUTFILE '/tmp/export.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
0 голосов
/ 06 апреля 2011

вы можете попробовать что-то вроде этого, играя с ASCII-символами

$somecontent .= str_replace(CHR(10), " ", $val);
$somecontent .= str_replace(CHR(13), " ", $val); 
0 голосов
/ 06 апреля 2011

Где твой $somecontent .= str_replace("\n", "", $val)?Я не могу найти его в вашем коде.

Вы можете указать массив в качестве первого параметра для str_replace, как указано там .Таким образом, он заменит каждую строку в вашем массиве вторым параметром.

Например, $somecontent .= str_replace(array("\n", "\r"), "", $val);

...