MySQL의 쿼리를 CSV로 변환하는 PHP 코드 [닫기]
PHPMySQL의 쿼리를 CSV로 변환하는 PHP 코드 [닫기]
PHP에서 MySQL 쿼리를 CSV로 변환하는 가장 효율적인 방법은 무엇입니까?
임시 파일은 이식성을 떨어 뜨리기 때문에 (dir 경로 및 필요한 파일 시스템 사용 권한 설정 필요) 피하는 것이 가장 좋습니다.
CSV에는 필드 이름의 최상위 행 하나가 포함되어야합니다.
해결법
-
==============================
1.
SELECT * INTO OUTFILE "c:/mydata.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\n" FROM my_table;
(이에 대한 문서는 http://dev.mysql.com/doc/refman/5.0/en/select.html)
또는:
$select = "SELECT * FROM table_name"; $export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) ); $fields = mysql_num_fields ( $export ); for ( $i = 0; $i < $fields; $i++ ) { $header .= mysql_field_name( $export , $i ) . "\t"; } while( $row = mysql_fetch_row( $export ) ) { $line = ''; foreach( $row as $value ) { if ( ( !isset( $value ) ) || ( $value == "" ) ) { $value = "\t"; } else { $value = str_replace( '"' , '""' , $value ); $value = '"' . $value . '"' . "\t"; } $line .= $value; } $data .= trim( $line ) . "\n"; } $data = str_replace( "\r" , "" , $data ); if ( $data == "" ) { $data = "\n(0) Records Found!\n"; } header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=your_desired_name.xls"); header("Pragma: no-cache"); header("Expires: 0"); print "$header\n$data";
-
==============================
2.이 질문 / 답변을 확인하십시오. @ Geoff보다 더 간결하며 내장 된 fputcsv 함수도 사용합니다.
이 질문 / 답변을 확인하십시오. @ Geoff보다 더 간결하며 내장 된 fputcsv 함수도 사용합니다.
$result = $db_con->query('SELECT * FROM `some_table`'); if (!$result) die('Couldn\'t fetch records'); $num_fields = mysql_num_fields($result); $headers = array(); for ($i = 0; $i < $num_fields; $i++) { $headers[] = mysql_field_name($result , $i); } $fp = fopen('php://output', 'w'); if ($fp && $result) { header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="export.csv"'); header('Pragma: no-cache'); header('Expires: 0'); fputcsv($fp, $headers); while ($row = $result->fetch_array(MYSQLI_NUM)) { fputcsv($fp, array_values($row)); } die; }
-
==============================
3.SELECT ... INTO OUTFILE 구문과 관련된 설명서를 참조하십시오.
SELECT ... INTO OUTFILE 구문과 관련된 설명서를 참조하십시오.
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;
-
==============================
4.@ 약간의 구문 차이가있는 @jrgns에 대한 업데이트입니다.
@ 약간의 구문 차이가있는 @jrgns에 대한 업데이트입니다.
$result = mysql_query('SELECT * FROM `some_table`'); if (!$result) die('Couldn\'t fetch records'); $num_fields = mysql_num_fields($result); $headers = array(); for ($i = 0; $i < $num_fields; $i++) { $headers[] = mysql_field_name($result , $i); } $fp = fopen('php://output', 'w'); if ($fp && $result) { header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="export.csv"'); header('Pragma: no-cache'); header('Expires: 0'); fputcsv($fp, $headers); while ($row = mysql_fetch_row($result)) { fputcsv($fp, array_values($row)); } die; }
-
==============================
5.다운로드 파일을 Excel에서 직접 열 수있는 다운로드 파일로 제공하려면이 방법이 유용 할 수 있습니다. (출시되지 않은 이전 프로젝트에서 복사)
다운로드 파일을 Excel에서 직접 열 수있는 다운로드 파일로 제공하려면이 방법이 유용 할 수 있습니다. (출시되지 않은 이전 프로젝트에서 복사)
이 함수는 헤더를 설정합니다.
function setExcelContentType() { if(headers_sent()) return false; header('Content-type: application/vnd.ms-excel'); return true; } function setDownloadAsHeader($filename) { if(headers_sent()) return false; header('Content-disposition: attachment; filename=' . $filename); return true; }
이 하나는 mysql 결과를 사용하여 스트림으로 CSV를 보냅니다.
function csvFromResult($stream, $result, $showColumnHeaders = true) { if($showColumnHeaders) { $columnHeaders = array(); $nfields = mysql_num_fields($result); for($i = 0; $i < $nfields; $i++) { $field = mysql_fetch_field($result, $i); $columnHeaders[] = $field->name; } fputcsv($stream, $columnHeaders); } $nrows = 0; while($row = mysql_fetch_row($result)) { fputcsv($stream, $row); $nrows++; } return $nrows; }
이 함수는 위의 함수를 사용하여 $ filename에 지정된 파일에 CSV를 씁니다.
function csvFileFromResult($filename, $result, $showColumnHeaders = true) { $fp = fopen($filename, 'w'); $rc = csvFromResult($fp, $result, $showColumnHeaders); fclose($fp); return $rc; }
그리고 이것이 마술이 일어나는 곳입니다.)
function csvToExcelDownloadFromResult($result, $showColumnHeaders = true, $asFilename = 'data.csv') { setExcelContentType(); setDownloadAsHeader($asFilename); return csvFileFromResult('php://output', $result, $showColumnHeaders); }
예 :
$result = mysql_query("SELECT foo, bar, shazbot FROM baz WHERE boo = 'foo'"); csvToExcelDownloadFromResult($result);
-
==============================
6.
// Export to CSV if($_GET['action'] == 'export') { $rsSearchResults = mysql_query($sql, $db) or die(mysql_error()); $out = ''; $fields = mysql_list_fields('database','table',$db); $columns = mysql_num_fields($fields); // Put the name of all fields for ($i = 0; $i < $columns; $i++) { $l=mysql_field_name($fields, $i); $out .= '"'.$l.'",'; } $out .="\n"; // Add all values in the table while ($l = mysql_fetch_array($rsSearchResults)) { for ($i = 0; $i < $columns; $i++) { $out .='"'.$l["$i"].'",'; } $out .="\n"; } // Output to browser with appropriate mime type, you choose ;) header("Content-type: text/x-csv"); //header("Content-type: text/csv"); //header("Content-type: application/csv"); header("Content-Disposition: attachment; filename=search_results.csv"); echo $out; exit; }
from https://stackoverflow.com/questions/125113/php-code-to-convert-a-mysql-query-to-csv by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
두 날짜 비교 (0) | 2018.09.12 |
---|---|
PostgreSQL 테이블 이름을 단순히 사용할 수 없습니다 ( "관계가 없습니다"). (0) | 2018.09.12 |
PHP 반향 대 PHP 단축 태그 (0) | 2018.09.12 |
PHP : 예약 된 작업 실행 (cron 작업) (0) | 2018.09.12 |
PHP의 모든 위치에 배열에 새 항목 삽입 (0) | 2018.09.12 |