CRM a datové platformy

PHP a MySQL: Exportujte dotaz do souboru CSV nebo odděleného tabulátory

Tento víkend jsem chtěl postavit PHP stránku, která by zálohovala jakékoli MySQL dotaz nebo tabulku do souboru odděleného tabulátory. Většina příkladů na internetu má sloupce pevně zakódované.

V mém případě jsem chtěl, aby sloupce byly dynamické, takže jsem musel nejprve procházet všechny názvy polí tabulky, abych vytvořil řádek záhlaví s názvy sloupců, a poté procházet všechny záznamy pro zbývající datové řádky. Hlavičku jsem také nastavil tak, že prohlížeč zahájí stahování souboru v typu souboru (txt) s názvem souboru s datem a časovým razítkem.

Export z MySQL v PHP oddělený tabulátory

<?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();
?>

Pojďme si projít kód krok za krokem s vysvětlením každé části:

<?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);
}
  • Vygenerujeme aktuální datum a čas ve formátu „YmdHi“ a uložíme jej do $today proměnná.
  • HTTP hlavičky jsou nastaveny tak, aby určovaly, že obsah by měl být považován za oktetový proud (binární data) a spouštět stahování souboru se zadaným názvem souboru.
  • Pomocí rozšíření vytvoříme připojení k databázi MySQL a nahradíme zástupné symboly vašimi skutečnými přihlašovacími údaji k databázi.
  • Zkontrolujeme, zda bylo připojení k databázi úspěšné. Ukončíme skript a zobrazíme chybovou zprávu, pokud dojde k chybě.
// 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";
  • Definujeme SQL dotaz pro výběr všech dat z mytable stůl, objednávejte jej podle myorder sloupec.
  • Dotaz se provede a výsledek se uloží do $result proměnná.
  • Zkontrolujeme, zda jsou vráceny nějaké řádky prozkoumáním num_rows vlastnost výsledného objektu.
  • Používáme fetch_fields() načíst názvy polí (sloupců) a uložit je do $fields pole.
  • Řádek záhlaví pro exportní soubor se připraví procházením názvů polí a jejich zřetězením pomocí karet.
    // 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";
    }
  • Používáme a while smyčka pro načtení každého datového řádku ze sady výsledků pomocí fetch_assoc().
  • Uvnitř smyčky připravujeme hodnoty každého řádku iterací přes pole a sběrem odpovídajících dat.
  • Hodnoty pro každý řádek jsou zřetězeny s tabulátory, aby se vytvořil řádek oddělený tabulátory, a tento řádek je přidán do $data proměnná.
    // 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();
?>
  • Pokud jsou nalezena data (zkontrolováno pomocí num_rows), opakujeme zřetězená data, která jsou obsahem exportního souboru. Tím se spustí stahování souboru v prohlížeči uživatele.
  • Pokud nejsou nalezena žádná data, zobrazíme zprávu, že nejsou k dispozici žádná data.
  • Uzavřeme připojení k databázi MySQL pomocí $conn->close() uvolnit zdroje.

Tento kód efektivně exportuje data z databázové tabulky MySQL do textového souboru odděleného tabulátory a zpracovává různé scénáře, jako jsou chyby připojení k databázi a prázdné sady výsledků.

Export hodnot oddělených čárkami z MySQL v PHP

Mohu upravit kód tak, aby exportoval data jako soubor CSV. Zde je kód aktualizovaný pro export CSV:

<?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();
?>

V tomto upraveném kódu:

  • Záhlaví pro odpověď HTTP jsou aktualizována tak, aby specifikovala a text/csv typ obsahu a název souboru má příponu „.csv“.
  • Místo ručního vytváření obsahu CSV používáme soubor fputcsv funkce pro výstup každého řádku z výsledkové sady MySQL jako řádek CSV. Tato funkce za vás zpracovává formátování CSV, včetně zpracování speciálních znaků a v případě potřeby uzavírání polí do dvojitých uvozovek.
  • Otevíráme popisovač výstupního souboru pomocí fopen s názvem souboru 'php://output'. To nám umožňuje zapisovat přímo do výstupního streamu odpovědi HTTP.
  • Kód je strukturován tak, aby efektivně zpracovával export CSV a po dokončení zavře popisovač souboru.

Tento kód exportuje data z tabulky MySQL jako soubor CSV, což uživatelům usnadní otevírání a práci s tabulkovými aplikacemi, jako je Excel. Nezapomeňte nahradit přihlašovací údaje k databázi vlastními.

Douglas Karr

Douglas Karr je CMO OpenINSIGHTS a zakladatelem Martech Zone. Douglas pomohl desítkám úspěšných MarTech startupů, pomohl s due diligence v hodnotě více než 5 miliard dolarů v akvizicích a investicích Martech a nadále pomáhá společnostem při implementaci a automatizaci jejich prodejních a marketingových strategií. Douglas je mezinárodně uznávaný odborník na digitální transformaci a MarTech a řečník. Douglas je také publikovaným autorem průvodce pro figuríny a knihy o obchodním vedení.

Související články

Tlačítko Nahoru
zavřít

Byl detekován Adblock

Martech Zone je schopna vám poskytnout tento obsah zdarma, protože naše stránky zpeněžujeme prostřednictvím příjmů z reklam, přidružených odkazů a sponzorství. Ocenili bychom, kdybyste při prohlížení našich stránek odstranili svůj blokovač reklam.