CRM- und Datenplattformen

PHP und MySQL: Exportieren Sie eine Abfrage in eine tabulatorgetrennte oder CSV-Datei

Dieses Wochenende wollte ich ein bauen PHP Seite, die jede sichern würde MySQL Abfrage oder Tabelle in eine durch Tabulatoren getrennte Datei. Bei den meisten Beispielen im Internet sind die Spalten fest codiert.

In meinem Fall wollte ich, dass die Spalten dynamisch sind, also musste ich zuerst alle Tabellenfeldnamen durchlaufen, um die Kopfzeile mit Spaltennamen zu erstellen, und dann alle Datensätze für die verbleibenden Datenzeilen durchlaufen. Außerdem habe ich den Header so eingestellt, dass der Browser den Dateidownload im Dateityp (txt) mit dem Namen der Datei, Datum und Zeitstempel initiiert.

Tabulatorgetrennter Export aus MySQL in PHP

<?php
$today = date("YmdHi");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.txt\"");
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$query = "SELECT * FROM `mytable` ORDER BY `myorder`";
$result = $conn->query($query);

if ($result->num_rows > 0) {
    $fields = $result->fetch_fields();
    
    // Prepare the header row
    $header = [];
    foreach ($fields as $field) {
        $header[] = $field->name;
    }
    $data = implode("\t", $header) . "\n";

    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        $rowValues = [];
        foreach ($fields as $field) {
            $rowValues[] = $row[$field->name];
        }
        $data .= implode("\t", $rowValues) . "\n";
    }

    // Output the data
    echo $data;
} else {
    echo "No data found";
}

// Close the database connection
$conn->close();
?>

Lassen Sie uns den Code Schritt für Schritt durchgehen und die einzelnen Teile erklären:

<?php
// Get the current date and time in a specific format
$today = date("YmdHi");

// Set HTTP headers for file download
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.txt\"");

// Create a MySQL database connection
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

// Check if the database connection was successful
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
  • Wir generieren das aktuelle Datum und die aktuelle Uhrzeit im „YmdHi“-Format und speichern es im $today variabel.
  • HTTP-Header werden so eingestellt, dass sie angeben, dass der Inhalt als Oktett-Stream (Binärdaten) behandelt werden soll und einen Dateidownload mit dem angegebenen Dateinamen auslösen.
  • Mithilfe der Erweiterung erstellen wir eine MySQL-Datenbankverbindung und ersetzen Platzhalter durch Ihre tatsächlichen Datenbankanmeldeinformationen.
  • Wir prüfen, ob die Datenbankverbindung erfolgreich war. Wir beenden das Skript und zeigen eine Fehlermeldung an, wenn ein Fehler vorliegt.
// Define the SQL query to select data from the `mytable` table
$query = "SELECT * FROM `mytable` ORDER BY `myorder`";

// Execute the SQL query
$result = $conn->query($query);

// Check if there are any rows returned
if ($result->num_rows > 0) {
    // Fetch the field (column) names
    $fields = $result->fetch_fields();

    // Prepare the header row for the export file
    $header = [];
    foreach ($fields as $field) {
        $header[] = $field->name;
    }
    $data = implode("\t", $header) . "\n";
  • Wir definieren die SQL-Abfrage, um alle Daten aus dem auszuwählen mytable Tisch, sortieren nach myorder Spalte.
  • Die Abfrage wird ausgeführt und das Ergebnis wird im gespeichert $result variabel.
  • Wir prüfen, ob Zeilen zurückgegeben werden, indem wir die überprüfen num_rows Eigenschaft des Ergebnisobjekts.
  • Wir verwenden fetch_fields() um die Feld-(Spalten-)Namen abzurufen und sie im zu speichern $fields Array.
  • Die Kopfzeile für die Exportdatei wird vorbereitet, indem die Feldnamen in einer Schleife durchlaufen und mit Tabulatoren verkettet werden.
    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        $rowValues = [];
        foreach ($fields as $field) {
            $rowValues[] = $row[$field->name];
        }
        $data .= implode("\t", $rowValues) . "\n";
    }
  • Wir benutzen ein while Schleife zum Abrufen jeder Datenzeile aus der Ergebnismenge mit fetch_assoc().
  • Innerhalb der Schleife bereiten wir die Werte jeder Zeile vor, indem wir die Felder durchlaufen und die entsprechenden Daten sammeln.
  • Die Werte für jede Zeile werden mit Tabulatoren verkettet, um eine durch Tabulatoren getrennte Zeile zu erstellen, und diese Zeile wird der hinzugefügt $data variabel.
    // Output the data to the browser
    echo $data;
} else {
    // If no data is found, display a message
    echo "No data found";
}

// Close the MySQL database connection
$conn->close();
?>
  • Wenn Daten gefunden werden (überprüft mit num_rows), geben wir die verketteten Daten zurück, die den Inhalt der Exportdatei darstellen. Dadurch wird der Dateidownload im Browser des Benutzers ausgelöst.
  • Wenn keine Daten gefunden werden, zeigen wir eine Meldung an, dass keine Daten verfügbar sind.
  • Wir schließen die MySQL-Datenbankverbindung mit $conn->close() Ressourcen freizugeben.

Dieser Code exportiert Daten effizient aus einer MySQL-Datenbanktabelle in eine tabulatorgetrennte Textdatei und behandelt verschiedene Szenarien, wie z. B. Datenbankverbindungsfehler und leere Ergebnismengen.

Durch Kommas getrennte Werte aus MySQL in PHP exportieren

Ich kann den Code ändern, um Daten als CSV-Datei zu exportieren. Hier ist der Code, aktualisiert für den CSV-Export:

<?php
// Get the current date and time in a specific format
$today = date("YmdHi");

// Set HTTP headers for file download
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=\"".$today."_Backup.csv\"");

// Create a MySQL database connection
$conn = new mysqli("hostname", "username", "password", "database_name"); // Replace with your database credentials

// Check if the database connection was successful
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Define the SQL query to select data from the `mytable` table
$query = "SELECT * FROM `mytable` ORDER BY `myorder`";

// Execute the SQL query
$result = $conn->query($query);

// Check if there are any rows returned
if ($result->num_rows > 0) {
    // Prepare the output file handle for writing
    $output = fopen('php://output', 'w');

    // Fetch and process the data rows
    while ($row = $result->fetch_assoc()) {
        // Output each row as a CSV line
        fputcsv($output, $row);
    }

    // Close the output file handle
    fclose($output);
} else {
    // If no data is found, display a message
    echo "No data found";
}

// Close the MySQL database connection
$conn->close();
?>

In diesem geänderten Code:

  • Die Header für die HTTP-Antwort werden aktualisiert, um a anzugeben text/csv Inhaltstyp und der Dateiname hat die Erweiterung „.csv“.
  • Anstatt den CSV-Inhalt manuell zu erstellen, verwenden wir den fputcsv Funktion, um jede Zeile aus dem MySQL-Ergebnissatz als CSV-Zeile auszugeben. Diese Funktion übernimmt die CSV-Formatierung für Sie, einschließlich der Behandlung von Sonderzeichen und dem Einschließen von Feldern in doppelte Anführungszeichen, wenn nötig.
  • Wir öffnen das Ausgabedatei-Handle mit fopen mit „php://output“ als Dateinamen. Dadurch können wir direkt in den HTTP-Antwort-Ausgabestream schreiben.
  • Der Code ist so strukturiert, dass er den CSV-Export effizient abwickelt und das Dateihandle schließt, wenn er fertig ist.

Dieser Code exportiert die Daten aus der MySQL-Tabelle als CSV-Datei, sodass Benutzer sie problemlos in Tabellenkalkulationsanwendungen wie Excel öffnen und damit arbeiten können. Vergessen Sie nicht, die Datenbankanmeldeinformationen durch Ihre eigenen zu ersetzen.

Douglas Karr

Douglas Karr ist CMO von Öffnen Sie EINBLICKE und Gründer der Martech Zone. Douglas hat Dutzenden erfolgreicher MarTech-Startups geholfen, war bei der Due Diligence von MarTech-Akquisitionen und -Investitionen im Wert von über 5 Milliarden US-Dollar behilflich und unterstützt weiterhin Unternehmen bei der Umsetzung und Automatisierung ihrer Vertriebs- und Marketingstrategien. Douglas ist ein international anerkannter Experte und Redner für digitale Transformation und MarTech. Douglas ist außerdem Autor eines Dummie-Ratgebers und eines Buchs über Unternehmensführung.

Ähnliche Artikel

Nach oben-Taste
Menu

Adblock erkannt

Martech Zone ist in der Lage, Ihnen diese Inhalte kostenlos zur Verfügung zu stellen, da wir unsere Website durch Werbeeinnahmen, Affiliate-Links und Sponsoring monetarisieren. Wir würden uns freuen, wenn Sie Ihren Werbeblocker entfernen würden, während Sie unsere Website besuchen.