CRM és adatplatformok

PHP és MySQL: Exportáljon lekérdezést tabulátorral tagolt vagy CSV-fájlba

Ezen a hétvégén szerettem volna építeni a PHP oldal, amelyről biztonsági másolat készül MySQL lekérdezést vagy táblázatot egy tabulátorral tagolt fájlba. A neten található példák többségében az oszlopok kemény kódolásúak.

Az én esetemben azt szerettem volna, hogy az oszlopok dinamikusak legyenek, ezért először az összes táblamezőnevet át kellett hurcolnom, hogy felállítsam a fejlécsort az oszlopnevekkel, majd a fennmaradó adatsorok összes rekordját végig kellett hurcolnom. A fejlécet is úgy állítottam be, hogy a böngésző a fájl nevével dátummal és időbélyeggel ellátott fájltípusban (txt) kezdeményezze a letöltést.

Tabulátorral tagolt exportálás MySQL-ből PHP-ben

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

Nézzük végig a kódot lépésről lépésre, az egyes részekre vonatkozó magyarázatokkal:

<?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);
}
  • Az aktuális dátumot és időt „YmdHi” formátumban állítjuk elő és tároljuk a $today változót.
  • A HTTP-fejlécek úgy vannak beállítva, hogy meghatározzák, hogy a tartalmat oktett adatfolyamként (bináris adatként) kell kezelni, és a megadott fájlnévvel fájlletöltést kell indítani.
  • A bővítmény használatával MySQL adatbázis-kapcsolatot hozunk létre, a helyőrzőket lecserélve az Ön tényleges adatbázis-hitelesítő adataira.
  • Ellenőrizzük, hogy az adatbázis-kapcsolat sikeres volt-e. Leállítjuk a szkriptet, és hiba esetén hibaüzenetet jelenítünk meg.
// 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";
  • Meghatározzuk az SQL lekérdezést az összes adat kiválasztásához mytable asztalra, megrendelve a myorder oszlop.
  • A lekérdezés végrehajtásra kerül, és az eredmény eltárolásra kerül a $result változót.
  • Ellenőrizzük, hogy vannak-e visszaadott sorok a num_rows az eredmény objektum tulajdonsága.
  • Az általunk használt fetch_fields() a mezők (oszlopok) nevének lekéréséhez és tárolására a $fields sor.
  • Az exportfájl fejlécsora a mezőnevek áthurkolásával és tabulátorokkal való összefűzésével készül.
    // 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";
    }
  • Használjuk a while hurkot az egyes adatsorok lekéréséhez az eredménykészletből a használatával fetch_assoc().
  • A cikluson belül elkészítjük az egyes sorok értékeit a mezők iterációjával és a megfelelő adatok összegyűjtésével.
  • Az egyes sorok értékei tabulátorokkal vannak összefűzve tabulátorral tagolt sor létrehozásához, és ez a sor hozzáadódik a $data változót.
    // 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();
?>
  • Ha vannak talált adatok (ellenőrizve a num_rows), visszhangozzuk az összefűzött adatokat, amelyek az exportfájl tartalma. Ez elindítja a fájl letöltését a felhasználó böngészőjében.
  • Ha nem található adat, akkor egy üzenetet jelenítünk meg, amely jelzi, hogy nincs adat.
  • A MySQL adatbázis-kapcsolatot a használatával lezárjuk $conn->close() források felszabadítására.

Ez a kód hatékonyan exportálja az adatokat egy MySQL adatbázistáblából egy tabulátorral tagolt szövegfájlba, és különféle forgatókönyveket kezel, például adatbázis-kapcsolati hibákat és üres eredményhalmazokat.

Vesszővel elválasztott értékek exportálása MySQL-ből PHP-ben

Módosíthatom a kódot, hogy adatokat exportálhassak CSV-fájlként. Íme a CSV-exportáláshoz frissített kód:

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

Ebben a módosított kódban:

  • A HTTP-válasz fejlécei frissítésre kerülnek, és a text/csv tartalomtípust, és a fájlnév kiterjesztése „.csv”.
  • A CSV-tartalom manuális létrehozása helyett a fputcsv függvényt, hogy a MySQL eredménykészlet minden sorát CSV-sorként adja ki. Ez a funkció kezeli Ön helyett a CSV formázását, beleértve a speciális karakterek kezelését és a mezők dupla idézőjelbe zárását, ha szükséges.
  • A kimeneti fájl kezelőjét a segítségével nyitjuk meg fopen 'php://output' fájlnévvel. Ez lehetővé teszi számunkra, hogy közvetlenül a HTTP válasz kimeneti adatfolyamába írjunk.
  • A kód úgy van felépítve, hogy hatékonyan kezelje a CSV-exportálást, és bezárja a fájlkezelőt, ha kész.

Ez a kód CSV-fájlként exportálja az adatokat a MySQL-táblázatból, így a felhasználók könnyen megnyithatják és dolgozhatnak táblázatkezelő alkalmazásokban, például az Excelben. Ne felejtse el lecserélni az adatbázis hitelesítő adatait a sajátjával.

Douglas Karr

Douglas Karr CMO of OpenINSIGHTS és az alapítója a Martech Zone. Douglas több tucat sikeres MarTech startupnak segített, több mint 5 milliárd dolláros átvilágításban segédkezett a Martech akvizíciókban és befektetésekben, és továbbra is segíti a vállalatokat értékesítési és marketingstratégiáik megvalósításában és automatizálásában. Douglas nemzetközileg elismert digitális átalakulás és MarTech szakértő és előadó. Douglas egy Dummie's Guide és egy üzleti vezetői könyv szerzője is.

Kapcsolódó cikkek

Vissza a lap tetejére gombra
közel

Adblock észlelve

Martech Zone ingyenesen tudja biztosítani Önnek ezt a tartalmat, mivel webhelyünkkel bevételt szerezünk hirdetési bevételek, társult linkek és szponzorálás révén. Nagyra értékelnénk, ha eltávolítaná hirdetésblokkolóját, miközben megtekinti webhelyünket.