CRM i platforme podataka

PHP i MySQL: Izvezite upit u tabulator ili CSV datoteku

Ovog vikenda, htio sam izgraditi a PHP stranica koja bi napravila sigurnosnu kopiju bilo koje MySQL upit ili tabelu u datoteku razdvojenu tabulatorom. Većina primjera na mreži imaju kolone tvrdo kodirane.

U mom slučaju, želio sam da kolone budu dinamičke, tako da sam prvo morao proći kroz sva imena polja tablice da bih napravio red zaglavlja s imenima kolona, ​​a zatim kroz sve zapise za preostale redove podataka. Također sam postavio zaglavlje tako da će pretraživač inicirati preuzimanje datoteke u tipu datoteke (txt) sa imenom datoteke sa datumom i vremenskom oznakom.

Izvoz razdvojen tabulatorom iz MySQL u PHP-u

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

Prođimo kroz kod korak po korak s objašnjenjima za svaki dio:

<?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);
}
  • Trenutni datum i vrijeme generišemo u formatu “YmdHi” i pohranjujemo ga u $today promenljiva.
  • HTTP zaglavlja su postavljena tako da specificiraju da se sadržaj treba tretirati kao oktet-tok (binarni podaci) i pokrenuti preuzimanje datoteke sa navedenim imenom datoteke.
  • Koristeći ekstenziju, kreiramo MySQL vezu sa bazom podataka, zamenjujući čuvare mesta sa vašim stvarnim akreditivima baze podataka.
  • Provjeravamo da li je veza s bazom podataka bila uspješna. Prekidamo skriptu i prikazujemo poruku o grešci ako postoji greška.
// 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";
  • Definiramo SQL upit za odabir svih podataka iz mytable stolu, naručivši ga po myorder kolona.
  • Upit se izvršava, a rezultat se pohranjuje u $result promenljiva.
  • Provjeravamo da li ima vraćenih redova ispitivanjem num_rows svojstvo objekta rezultata.
  • Koristimo fetch_fields() da preuzmete nazive polja (kolona) i pohranite ih u $fields niz.
  • Red zaglavlja za datoteku za izvoz priprema se petljom kroz nazive polja i spajanjem sa karticama.
    // 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";
    }
  • Koristimo a while petlja za dohvaćanje svakog reda podataka iz skupa rezultata pomoću fetch_assoc().
  • Unutar petlje pripremamo vrijednosti svakog reda iteracijom kroz polja i prikupljanjem odgovarajućih podataka.
  • Vrijednosti za svaki red su povezane s tabulatorima kako bi se stvorio red razdvojen tabulatorima, a ovaj red se dodaje u $data promenljiva.
    // 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();
?>
  • Ako su pronađeni podaci (označeno sa num_rows), ponavljamo povezane podatke, koji su sadržaj datoteke za izvoz. Ovo pokreće preuzimanje datoteke u pretraživaču korisnika.
  • Ako podaci nisu pronađeni, prikazujemo poruku koja pokazuje da podaci nisu dostupni.
  • Zatvaramo MySQL vezu sa bazom podataka koristeći $conn->close() da oslobodi resurse.

Ovaj kod efikasno izvozi podatke iz MySQL tabele baze podataka u tekstualnu datoteku razdvojenu tabulatorima i obrađuje različite scenarije, kao što su greške u povezivanju baze podataka i prazni skupovi rezultata.

Izvoz vrijednosti razdvojenih zarezima iz MySQL-a u PHP-u

Mogu izmijeniti kod za izvoz podataka kao CSV datoteke. Evo koda, ažuriranog za CSV izvoz:

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

U ovom izmijenjenom kodu:

  • Zaglavlja za HTTP odgovor se ažuriraju da specificiraju a text/csv tip sadržaja, a ime datoteke ima ekstenziju “.csv”.
  • Umjesto ručnog kreiranja CSV sadržaja, koristimo fputcsv funkciju za izlaz svakog reda iz MySQL skupa rezultata kao CSV linije. Ova funkcija upravlja CSV formatiranjem umjesto vas, uključujući rukovanje posebnim znakovima i zatvaranje polja u dvostruke navodnike kada je to potrebno.
  • Otvaramo ručku izlazne datoteke koristeći fopen sa 'php://output' kao imenom datoteke. Ovo nam omogućava da pišemo direktno u izlazni tok HTTP odgovora.
  • Kôd je strukturiran tako da efikasno upravlja izvozom CSV-a i zatvara ručku datoteke kada se završi.

Ovaj kod će izvesti podatke iz MySQL tablice kao CSV datoteku, što korisnicima olakšava otvaranje i rad u aplikacijama za proračunske tablice kao što je Excel. Ne zaboravite da zamenite akreditive baze podataka svojim.

Douglas Karr

Douglas Karr je CMO of OpenINSIGHTS i osnivač Martech Zone. Douglas je pomogao desetinama uspješnih MarTech startupova, pomogao je u dubinskom pregledu od preko 5 milijardi dolara u Martechovim akvizicijama i investicijama, te nastavlja da pomaže kompanijama u implementaciji i automatizaciji njihovih prodajnih i marketinških strategija. Douglas je međunarodno priznati stručnjak za digitalnu transformaciju i MarTech stručnjak i govornik. Douglas je također objavljeni autor Dummie's vodiča i knjige o poslovnom liderstvu.

Vezani članci

Nazad na vrh dugmeta
blizu

Adblock otkriven

Martech Zone je u mogućnosti da vam pruži ovaj sadržaj bez ikakvih troškova jer mi unovčavamo našu stranicu putem prihoda od oglasa, partnerskih veza i sponzorstava. Bili bismo zahvalni ako biste uklonili svoj blokator oglasa dok gledate našu web stranicu.