44 Stimmen

MySQL: CSV Export als automatischer Download

Tutorial von Stefan Trost | Letztes Update am 19.11.2022 | Erstellt am 01.08.2011

Oftmals möchte man eine MySQL Tabelle als CSV-Datei herunterladen, zum Beispiel um sie in Excel öffnen zu können oder um sie in eine andere Datenbank zu importieren. In diesem Tutorial möchte ich ein PHP Skript zeigen, das einem ermöglicht eine MySQL Tabelle schnell und einfach in eine Datei zu speichern, deren Download dann automatisch startet.

Sollten Sie die Datei lieber auf dem Server abspeichern wollen, sollten Sie in dieses andere Tutorial schauen, wo genau das gezeigt wird.

Für unseren Export als automatischen Download legen wir uns zunächst eine Datei Namens "export.php" an, die folgenden Code enthält:

<?php
//MySQL Anfrage
$datenbank  = ""; //Name der Datenbank
$verbindung = @mysql_connect("","",""); //Server, User, Passwort
$anfrage    = "SELECT * FROM tabelle WHERE 1"; //Tabelle
$ergebnis   = mysql_db_query($datenbank, $anfrage, $verbindung);

//Header senden
header("HTTP/1.1 200 OK");
header("Content-Type: text/x-csv");
header('Content-Disposition: attachment; filename="export.csv"');
header("Content-Transfer-Encoding: binary");
header('Cache-Control: no-cache');

//Daten ausgeben
while($zeile = mysql_fetch_array($ergebnis, MYSQL_NUM)) {
   foreach($zeile as $wert) {
      echo '"',str_replace('"', '""', utf8_decode($wert)),'";';	
   }
   echo "\r\n";
}
?>

In dieser Datei müssen Sie oben noch den Namen Ihrer Datenbank und der Tabelle sowie den Server, den User und das Passwort eintragen, damit sich MySQL richtig verbinden kann.

Wir wollen die Funktion einmal Schritt für Schritt durchgehen:

MySQL Anfrage

Im ersten Teil wird eine Verbindung zu der Datenbank hergestellt, eine Anfrage formuliert und das Ergebnis dieser Anfrage in $ergebnis abgespeichert. Hier können Sie jede beliebige SELECT/WHERE/ORDER BY Anweisung benutzen, je nachdem welche Daten Sie wie exportierten möchten.

Header senden

Interessant wird es im zweiten Teil. Hier wird der Header gesendet, der es möglich macht, dass die folgenden Daten nicht als normale Website sondern als CSV Datei zum Download angeboten werden. Hier können Sie auch angeben, wie die Datei heißen soll. Im Beispiel verwenden wir "export.csv". Bitte beachten Sie in diesem Teil, dass kein Zeichen vor dem Header ausgegeben werden darf. Sonst kommt es zu einer Fehlermeldung.

Daten ausgeben

Nachdem der Header gesendet wurde, der dem Browser mitteilt, das nun eine CSV-Datei kommt, die als Download angeboten wird, können wir die Daten einfach so ausgeben, wie sie in der CSV Datei stehen sollen. Dazu gehen wir einfach Zeile für Zeile durch das MySQL Ergebnis. In jeder Zeile wandern wir durch die Felder und geben vor und nach dem Feld ein " als Begrenzung aus und ein ";" als Trennzeichen zwischen den Feldern. Schließlich geben wir nach jeder Zeile mit "\r\n" einen Zeilenumbruch als Begrenzung für die Zeilen aus.

Innerhalb der Felder verdoppeln wir die Anführungszeichen, damit sie nicht fälschlicherweise als der Beginn eines neuen Feldes interpretiert werden. Außerdem benutzen wir die Funktion utf8_decode(), um die UTF8-Kodierung aufzuheben. Das machen wir, weil Excel die Datei sonst möglicherweise nicht richtig formatiert anzeigen kann. Natürlich kann man dies auch weglassen und die CSV-Datei je nach Bedarf als UTF8 ausgeben.

AntwortenPositivNegativ
22 Stimmen

Schöner Tipp, sehr brauchbarer Code. Hier noch einmal eine kleine Ergänzung von mir:

Zeilenumbrüche vor CSV Export aus MySQL Tabelle entfernen

Muss man nicht, aber kann man. Zeilenumbrüche können sonst die ganze schöne CSV Datei zerschießen.
09.11.2011 um 18:04

AntwortenPositiv Negativ
Antworten

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

PHP: Datei Download Skript

Tutorial | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.