CRM un datu platformas

PHP un MySQL: eksportējiet vaicājumu uz tabulēšanas vai CSV failu

Šajā nedēļas nogalē es gribēju uzbūvēt a PHP lapa, kas dublētu jebkuru MySQL vaicājumu vai tabulu ar tabulēšanas atdalītu failu. Lielākajai daļai tīklā pieejamo piemēru kolonnas ir kodētas.

Manā gadījumā es vēlējos, lai kolonnas būtu dinamiskas, tāpēc man vispirms bija jāiziet cauri visiem tabulas lauku nosaukumiem, lai izveidotu galvenes rindu ar kolonnu nosaukumiem, un pēc tam cilpu cauri visiem ierakstiem atlikušajām datu rindām. Es arī iestatīju galveni tā, lai pārlūkprogramma sāktu faila lejupielādi faila tipā (txt) ar faila nosaukumu un laika zīmogu.

Ar cilni atdalīts eksports no MySQL 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();
?>

Soli pa solim apskatīsim kodu ar katras daļas skaidrojumiem:

<?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);
}
  • Mēs ģenerējam pašreizējo datumu un laiku “YmdHi” formātā un saglabājam to $today mainīgs.
  • HTTP galvenes ir iestatītas, lai norādītu, ka saturs ir jāuzskata par okteta straumi (binārie dati) un aktivizē faila lejupielādi ar norādīto faila nosaukumu.
  • Izmantojot paplašinājumu, mēs izveidojam MySQL datu bāzes savienojumu, aizstājot vietturus ar jūsu faktiskajiem datu bāzes akreditācijas datiem.
  • Mēs pārbaudām, vai datu bāzes savienojums bija veiksmīgs. Mēs pārtraucam skriptu un parādām kļūdas ziņojumu, ja rodas kļūda.
// 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";
  • Mēs definējam SQL vaicājumu, lai atlasītu visus datus no mytable galds, pasūtot to pēc myorder kolonna.
  • Vaicājums tiek izpildīts, un rezultāts tiek saglabāts mapē $result mainīgs.
  • Mēs pārbaudām, vai ir atgrieztas rindas, pārbaudot num_rows rezultāta objekta īpašība.
  • Mēs izmantojam fetch_fields() lai izgūtu lauku (kolonnu) nosaukumus un saglabātu tos mapē $fields masīvs.
  • Eksporta faila galvenes rinda tiek sagatavota, pārskatot lauku nosaukumus un savienojot tos ar cilnēm.
    // 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";
    }
  • Mēs izmantojam a while cilpa, lai iegūtu katru datu rindu no rezultātu kopas, izmantojot fetch_assoc().
  • Cilpas iekšpusē mēs sagatavojam katras rindas vērtības, atkārtojot laukus un apkopojot atbilstošos datus.
  • Katras rindas vērtības tiek savienotas ar tabulēšanas zīmēm, lai izveidotu ar tabulēšanu atdalītu rindu, un šī rinda tiek pievienota $data mainīgs.
    // 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();
?>
  • Ja ir atrasti dati (pārbaudīts ar num_rows), mēs atkārtojam savienotos datus, kas ir eksporta faila saturs. Tas aktivizē faila lejupielādi lietotāja pārlūkprogrammā.
  • Ja dati netiek atrasti, tiek parādīts ziņojums, kas norāda, ka dati nav pieejami.
  • Mēs aizveram MySQL datu bāzes savienojumu, izmantojot $conn->close() atbrīvot resursus.

Šis kods efektīvi eksportē datus no MySQL datu bāzes tabulas ar cilnēm atdalītā teksta failā un apstrādā dažādus scenārijus, piemēram, datu bāzes savienojuma kļūdas un tukšas rezultātu kopas.

Komatatdalīto vērtību eksportēšana no MySQL PHP

Es varu modificēt kodu, lai eksportētu datus kā CSV failu. Šis ir kods, kas atjaunināts CSV eksportēšanai:

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

Šajā modificētajā kodā:

  • HTTP atbildes galvenes tiek atjauninātas, lai norādītu a text/csv satura tipu, un faila nosaukumam ir paplašinājums “.csv”.
  • Tā vietā, lai manuāli izveidotu CSV saturu, mēs izmantojam fputcsv funkcija, lai izvadītu katru rindu no MySQL rezultātu kopas kā CSV rindiņu. Šī funkcija apstrādā CSV formatējumu jūsu vietā, tostarp apstrādā speciālās rakstzīmes un vajadzības gadījumā ievieto laukus dubultpēdiņās.
  • Mēs atveram izvades faila rokturi, izmantojot fopen ar 'php://output' kā faila nosaukumu. Tas ļauj mums rakstīt tieši HTTP atbildes izvades straumē.
  • Kods ir strukturēts tā, lai efektīvi apstrādātu CSV eksportu, un, kad tas ir paveikts, tiek aizvērts faila rokturis.

Šis kods eksportēs datus no MySQL tabulas kā CSV failu, tādējādi lietotājiem atvieglojot atvēršanu un darbu ar izklājlapu lietojumprogrammām, piemēram, Excel. Neaizmirstiet aizstāt datu bāzes akreditācijas datus ar saviem.

Douglas Karr

Douglas Karr ir TKO no OpenINSIGHTS un dibinātājs Martech Zone. Duglass ir palīdzējis desmitiem veiksmīgu MarTech jaunuzņēmumu, ir palīdzējis veikt vairāk nekā 5 miljardu dolāru Martech iegādes un ieguldījumu uzticamības pārbaudi, kā arī turpina palīdzēt uzņēmumiem ieviest un automatizēt to pārdošanas un mārketinga stratēģijas. Douglas ir starptautiski atzīts digitālās transformācijas un MarTech eksperts un runātājs. Duglass ir arī publicēts Dummie rokasgrāmatas un biznesa vadības grāmatas autors.

Saistītie raksti

Atpakaļ uz augšu pogu
aizvērt

Reklāmu bloķēšana konstatēta

Martech Zone var nodrošināt jums šo saturu bez maksas, jo mēs gūstam peļņu no savas vietnes, izmantojot ieņēmumus no reklāmām, saistīto uzņēmumu saites un sponsorēšanu. Būsim pateicīgi, ja, apskatot mūsu vietni, noņemtu savu reklāmu bloķētāju.