Código PHP para converter uma consulta MySQL em CSV [fechado]
128
Qual é a maneira mais eficiente de converter uma consulta MySQL para CSV em PHP, por favor?
Seria melhor evitar arquivos temporários, pois isso reduz a portabilidade (caminhos de diretório e configuração de permissões do sistema de arquivos necessárias).
O CSV também deve incluir uma linha superior dos nomes dos campos.
Observe o uso de barras com o SELECT INTO OUTFILEmesmo no Windows.
28411 Johan
1
Oi, isso funciona bem para o formato xls, mas se eu tentar salvar como arquivo CSV, ele mostra todos os resultados em 1 coluna. Eu quero salvar isso como arquivo csv.
Vinod reddy
Entre os dois acima, qual é o melhor, mais seguro e por quê?
Chella
1
Eu sugeriria que a segunda opção é mais segura, pois `SELECT INTO OUTFILE exige que o usuário do mysql tenha acesso ao sistema de arquivos para alterar arquivos, o que é um risco potencialmente grande.
Jeepstone # 23/14
91
Confira esta pergunta / resposta . É mais conciso que o do @ Geoff e também usa a função fputcsv embutida.
Caso alguém seja tão estúpido quanto eu, não o substitua php://outputpor um nome de arquivo real nem tente fechá-lo com um fcloseno final: não é um arquivo real, apenas um alias para o fluxo de saída. De qualquer forma, essa resposta funcionou perfeitamente para mim, obrigado Jrgns!
Para o MySQL moderno, você pode usar: $ headers [] = mysqli_fetch_field_direct ($ result, $ i) -> name;
Ben em CA
E mude as outras funções mysql_ para mysqli_ functions.
Ben em CA
6
Se você deseja que o download seja oferecido como um download que pode ser aberto diretamente no Excel, isso pode funcionar para você: (copiado de um projeto antigo não lançado meu)
Essas funções configuram os cabeçalhos:
function setExcelContentType(){if(headers_sent())returnfalse;
header('Content-type: application/vnd.ms-excel');returntrue;}function setDownloadAsHeader($filename){if(headers_sent())returnfalse;
header('Content-disposition: attachment; filename='. $filename);returntrue;}
Este envia um CSV para um fluxo usando um resultado mysql
Obrigado john código muito útil. Teve que modificar uma linha para a função csvFromResult. em vez de while ($ row = mysql_fetch_row ($ result)) {fputcsv ($ stream, $ row); $ linhas ++; }, eu tive que usar while ($ row = mysql_fetch_row ($ result)) {$ data [] = $ row; // fputcsv ($ stream, $ row); // $ linhas ++; } foreach ($ data como $ d) {fputcsv ($ stream, $ d); } obrigado novamente por um código tão maravilhoso.
Codingbbq
3
// Export to CSVif($_GET['action']=='export'){
$rsSearchResults = mysql_query($sql, $db)ordie(mysql_error());
$out ='';
$fields = mysql_list_fields('database','table',$db);
$columns = mysql_num_fields($fields);// Put the name of all fieldsfor($i =0; $i < $columns; $i++){
$l=mysql_field_name($fields, $i);
$out .='"'.$l.'",';}
$out .="\n";// Add all values in the tablewhile($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;}
Respostas:
( a documentação para isso está aqui: http://dev.mysql.com/doc/refman/5.0/en/select.html )
ou:
fonte
SELECT INTO OUTFILE
mesmo no Windows.Confira esta pergunta / resposta . É mais conciso que o do @ Geoff e também usa a função fputcsv embutida.
fonte
php://output
por um nome de arquivo real nem tente fechá-lo com umfclose
no final: não é um arquivo real, apenas um alias para o fluxo de saída. De qualquer forma, essa resposta funcionou perfeitamente para mim, obrigado Jrgns!Veja a documentação referente à sintaxe SELECT ... INTO OUTFILE.
fonte
Uma atualização para a solução @jrgns (com algumas pequenas diferenças de sintaxe).
fonte
Se você deseja que o download seja oferecido como um download que pode ser aberto diretamente no Excel, isso pode funcionar para você: (copiado de um projeto antigo não lançado meu)
Essas funções configuram os cabeçalhos:
Este envia um CSV para um fluxo usando um resultado mysql
Este usa a função acima para gravar um CSV em um arquivo, fornecido por $ filename
E é aí que a mágica acontece;)
Por exemplo:
fonte
fonte