CRM kaj Datumaj Platformoj

PHP kaj MySQL: Eksportu Demandon al Tab Limigita aŭ CSV-Dosiero

Ĉi-semajnfine, mi volis konstrui a PHP paĝo kiu sekurigus iun ajn MySQL konsulto aŭ tabelo en Tab Limigitan dosieron. La plej multaj el la ekzemploj en la reto havas la kolumnojn malfacile kodigitaj.

En mia kazo, mi volis, ke la kolumnoj estu dinamikaj, do mi devis unue trarigardi ĉiujn tabelajn kamponomojn por konstrui la kaplinion kun kolumnomoj kaj poste trarigardi ĉiujn rekordojn por la ceteraj datumvicoj. Mi ankaŭ agordis la kaplinion por ke la retumilo komencu la dosier-elŝuton en la dosiertipo (txt) kun la nomo de la dosierdato kaj tempostampita.

Tab Limigita Eksporto El MySQL en 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();
?>

Ni trairu la kodon paŝon post paŝo kun klarigoj por ĉiu parto:

<?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);
}
  • Ni generas la aktualan daton kaj horon en la formato "YmdHi" kaj konservas ĝin en la $today variablo.
  • HTTP-titoloj estas fiksitaj por specifi, ke la enhavo estu traktata kiel okteto-rivereto (binaraj datumoj) kaj ekigi dosier-elŝuton kun la specifita dosiernomo.
  • Uzante la etendon, ni kreas MySQL-datumbazan konekton, anstataŭigante anstataŭaĵojn per viaj realaj datumbazaj akreditaĵoj.
  • Ni kontrolas ĉu la datumbaza konekto sukcesis. Ni finas la skripton kaj montras erarmesaĝon se estas eraro.
// 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";
  • Ni difinas la SQL-demandon por elekti ĉiujn datumojn el la mytable tablo, ordigante ĝin per la myorder Kolumno.
  • La demando estas efektivigita, kaj la rezulto estas konservita en la $result variablo.
  • Ni kontrolas ĉu estas iuj vicoj resenditaj ekzamenante la num_rows eco de la rezulta objekto.
  • Ni uzas fetch_fields() por preni la kampojn (kolumnojn) nomojn kaj konservi ilin en la $fields tabelo.
  • La kaplinio por la eksportdosiero estas preparita per buklo tra la kamponomoj kaj kunligante ilin per langetoj.
    // 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";
    }
  • Ni uzas a while buklo por preni ĉiun datuman vicon de la rezulta aro uzante fetch_assoc().
  • Ene de la buklo, ni preparas la valorojn de ĉiu vico per ripetado tra la kampoj kaj kolektante la respondajn datumojn.
  • La valoroj por ĉiu vico estas kunligitaj kun langetoj por krei langeton-limigitan vicon, kaj ĉi tiu vico estas aldonita al la $data variablo.
    // 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();
?>
  • Se estas datumoj trovitaj (kontrolitaj per num_rows), ni eĥas la kunligitajn datumojn, kiu estas la enhavo de la eksportdosiero. Ĉi tio ekigas la elŝuton de dosiero en la retumilo de la uzanto.
  • Se neniuj datumoj estas trovitaj, ni montras mesaĝon indikante, ke neniuj datumoj estas haveblaj.
  • Ni fermas la MySQL-datumbazan konekton uzante $conn->close() liberigi rimedojn.

Ĉi tiu kodo efike eksportas datumojn de MySQL-datumbaza tabelo en tabul-limigitan tekstdosieron kaj pritraktas diversajn scenarojn, kiel datumbazkonekto-eraroj kaj malplenaj rezultaj aroj.

Komo-Separataj Valoroj Eksportu De MySQL en PHP

Mi povas modifi la kodon por eksporti datumojn kiel CSV-dosieron. Jen la kodo, ĝisdatigita por CSV-eksporto:

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

En ĉi tiu modifita kodo:

  • La kaplinioj por la HTTP-respondo estas ĝisdatigitaj por specifi a text/csv enhavotipo, kaj la dosiernomo havas la etendon ".csv".
  • Anstataŭ mane krei la CSV-enhavon, ni uzas la fputcsv funkcio por eligi ĉiun vicon de la MySQL-rezulta aro kiel CSV-linio. Ĉi tiu funkcio pritraktas la CSV-formaton por vi, inkluzive de pritraktado de specialaj signoj kaj enfermado de kampoj inter citiloj kiam necese.
  • Ni malfermas la eligdosieran tenilon uzante fopen kun 'php://output' kiel la dosiernomo. Ĉi tio permesas al ni skribi rekte al la HTTP-responda eligofluo.
  • La kodo estas strukturita por trakti CSV-eksporton efike kaj fermas la dosiertenilon kiam finite.

Ĉi tiu kodo eksportos la datumojn de la MySQL-tabelo kiel CSV-dosieron, faciligante al uzantoj malfermi kaj labori kun kalkultabelaj aplikaĵoj kiel Excel. Ne forgesu anstataŭigi la datumbazajn akreditaĵojn per viaj propraj.

Douglas Karr

Douglas Karr estas CMO de OpenINSIGHTS kaj la fondinto de la Martech Zone. Douglas helpis dekduojn da sukcesaj MarTech-noventreprenoj, helpis en la konvena diligento de pli ol $ 5 miliardoj en Martech-akiroj kaj investoj, kaj daŭre helpas firmaojn en efektivigado kaj aŭtomatigo de siaj vendaj kaj merkatigstrategioj. Douglas estas internacie agnoskita cifereca transformo kaj MarTech-eksperto kaj parolanto. Douglas ankaŭ estas publikigita verkinto de la gvidisto de Dummie kaj komerca gvidadlibro.

rilataj Artikoloj

Reen al la supra butono
Fermi

Adbloko Detektita

Martech Zone kapablas provizi al vi ĉi tiun enhavon senkoste ĉar ni monetigas nian retejon per reklamaj enspezoj, filiaj ligiloj kaj sponsorado. Ni dankus se vi forigus vian reklamblokilon dum vi rigardas nian retejon.