Kod PHP do konwersji zapytania MySQL na CSV [zamknięte]
128
Jaki jest najskuteczniejszy sposób konwersji zapytania MySQL na CSV w PHP?
Najlepiej byłoby unikać plików tymczasowych, ponieważ zmniejsza to przenośność (wymagane ścieżki do katalogu i ustawienia uprawnień do systemu plików).
Plik CSV powinien również zawierać jedną górną linię nazw pól.
Zwróć uwagę na użycie ukośników SELECT INTO OUTFILEnawet w systemie Windows.
Johan
1
Hii działa to dobrze w formacie xls, ale jeśli spróbuję zapisać jako plik CSV, wszystkie wyniki zostaną wyświetlone w 1 kolumnie. Chcę to zapisać jako plik csv.
vinod reddy
Który z powyższych jest lepszy, bezpieczniejszy i dlaczego?
Chella,
1
Sugerowałbym, że druga opcja jest bezpieczniejsza, ponieważ `SELECT INTO OUTFILE wymaga od użytkownika mysql dostępu do systemu plików w celu zmiany plików, co jest potencjalnie dużym ryzykiem.
Jeepstone
91
Sprawdź to pytanie / odpowiedź . Jest bardziej zwięzły niż @ Geoff, a także wykorzystuje wbudowaną funkcję fputcsv.
Na wypadek, gdyby ktokolwiek inny był tak głupi jak ja, nie zastępuj php://outputrzeczywistą nazwą pliku ani nie próbuj jej zamykać fclosena końcu: to nie jest prawdziwy plik, tylko alias dla strumienia wyjściowego. W każdym razie ta odpowiedź działała idealnie dla mnie, dzięki Jrgns!
W przypadku nowoczesnego MySQL możesz użyć: $ headers [] = mysqli_fetch_field_direct ($ result, $ i) -> name;
Ben w Kalifornii
I zmień inne funkcje mysql_ na funkcje mysqli_.
Ben w Kalifornii
6
Jeśli chcesz, aby pobieranie było oferowane jako plik do pobrania, który można otworzyć bezpośrednio w programie Excel, może to zadziałać: (skopiowane z mojego starego, niewydanego projektu)
Te funkcje konfigurują nagłówki:
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;}
Ten wysyła plik CSV do strumienia przy użyciu wyniku mysql
Odpowiedzi:
( dokumentacja na ten temat jest dostępna tutaj: http://dev.mysql.com/doc/refman/5.0/en/select.html )
lub:
źródło
SELECT INTO OUTFILE
nawet w systemie Windows.Sprawdź to pytanie / odpowiedź . Jest bardziej zwięzły niż @ Geoff, a także wykorzystuje wbudowaną funkcję fputcsv.
źródło
php://output
rzeczywistą nazwą pliku ani nie próbuj jej zamykaćfclose
na końcu: to nie jest prawdziwy plik, tylko alias dla strumienia wyjściowego. W każdym razie ta odpowiedź działała idealnie dla mnie, dzięki Jrgns!Zapoznaj się z dokumentacją dotyczącą składni SELECT ... INTO OUTFILE.
źródło
Aktualizacja rozwiązania @jrgns (z niewielkimi różnicami w składni).
źródło
Jeśli chcesz, aby pobieranie było oferowane jako plik do pobrania, który można otworzyć bezpośrednio w programie Excel, może to zadziałać: (skopiowane z mojego starego, niewydanego projektu)
Te funkcje konfigurują nagłówki:
Ten wysyła plik CSV do strumienia przy użyciu wyniku mysql
Ten używa powyższej funkcji do zapisania pliku CSV do pliku, podanego przez $ filename
I tu właśnie dzieje się magia;)
Na przykład:
źródło
źródło