CRM և տվյալների պլատֆորմներ

PHP և MySQL. արտահանել հարցումը ներդիրի սահմանազատված կամ CSV ֆայլ

Այս շաբաթավերջին ես ուզում էի կառուցել ա PHP էջ, որը կրկնօրինակում է ցանկացածը MySQL հարցումը կամ աղյուսակը Tab Delimited ֆայլի մեջ: Ցանցում ներկայացված օրինակների մեծ մասը սյունակները կոշտ կոդավորված են:

Իմ դեպքում ես ուզում էի, որ սյունակները դինամիկ լինեին, ուստի ես պետք է նախ պտույտ կատարեի աղյուսակի բոլոր դաշտերի անունների միջով, որպեսզի կառուցեի վերնագրի տողը սյունակների անուններով, այնուհետև անցա բոլոր գրառումները մնացած տվյալների տողերի համար: Ես նաև դրեցի վերնագիրն այնպես, որ զննարկիչը կսկսի ֆայլի ներբեռնումը ֆայլի տեսակով (txt)՝ ֆայլի ամսաթվի անվան և ժամադրոշմով:

Ներդիրի սահմանազատված արտահանում 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();
?>

Եկեք քայլ առ քայլ անցնենք կոդը՝ յուրաքանչյուր մասի բացատրություններով.

<?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);
}
  • Մենք ստեղծում ենք ընթացիկ ամսաթիվը և ժամը «YmdHi» ձևաչափով և պահում այն $today փոփոխական:
  • HTTP վերնագրերը սահմանվում են այնպես, որ բովանդակությունը պետք է դիտարկվի որպես octet-stream (երկուական տվյալներ) և գործարկի ֆայլի ներբեռնումը նշված ֆայլի անունով:
  • Օգտագործելով ընդլայնումը, մենք ստեղծում ենք MySQL տվյալների բազայի կապ՝ փոխարինելով տեղապահները ձեր իրական տվյալների բազայի հավաստագրերով:
  • Մենք ստուգում ենք, արդյոք տվյալների բազայի կապը հաջող է եղել: Մենք դադարեցնում ենք սկրիպտը և սխալի դեպքում ցուցադրում ենք սխալի հաղորդագրություն:
// 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";
  • Մենք սահմանում ենք SQL հարցումը՝ բոլոր տվյալները ընտրելու համար mytable սեղան, պատվիրելով այն myorder սյունակ:
  • Հարցումը կատարվում է, և արդյունքը պահվում է $result փոփոխական:
  • Մենք ստուգում ենք, արդյոք կան վերադարձված տողեր՝ ուսումնասիրելով այն num_rows արդյունքի օբյեկտի հատկությունը.
  • Մենք օգտագործում ենք fetch_fields() դաշտերի (սյունակների) անունները առբերելու և դրանք պահելու համար $fields զանգված
  • Արտահանման ֆայլի վերնագրի տողը պատրաստվում է դաշտերի անունները պտտելով և դրանք միացնելով ներդիրներին:
    // 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";
    }
  • Մենք օգտագործում ենք while հանգույց՝ օգտագործելով տվյալների յուրաքանչյուր տող արդյունքների հավաքածուից fetch_assoc().
  • Շրջանակի ներսում մենք պատրաստում ենք յուրաքանչյուր տողի արժեքները՝ կրկնելով դաշտերը և հավաքելով համապատասխան տվյալները:
  • Յուրաքանչյուր տողի արժեքները միացվում են ներդիրներին՝ ներդիրներով սահմանազատված տող ստեղծելու համար, և այս տողը ավելացվում է $data փոփոխական:
    // 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();
?>
  • Եթե ​​կան տվյալներ (ստուգված num_rows), մենք արձագանքում ենք միացված տվյալներին, որոնք արտահանման ֆայլի բովանդակությունն են: Սա գործարկում է ֆայլի ներբեռնումը օգտվողի դիտարկիչում:
  • Եթե ​​որևէ տվյալ չի գտնվել, մենք ցուցադրում ենք հաղորդագրություն, որը ցույց է տալիս, որ տվյալներ չկան:
  • Մենք փակում ենք MySQL տվյալների բազայի կապը՝ օգտագործելով $conn->close() ռեսուրսներ ազատելու համար:

Այս կոդը արդյունավետ կերպով արտահանում է տվյալները MySQL տվյալների բազայի աղյուսակից ներդիրներով սահմանազատված տեքստային ֆայլի մեջ և կարգավորում տարբեր սցենարներ, ինչպիսիք են տվյալների բազայի միացման սխալները և դատարկ արդյունքների հավաքածուները:

Ստորակետերով բաժանված արժեքներ Արտահանել MySQL-ից PHP-ում

Ես կարող եմ փոփոխել կոդը՝ տվյալների արտահանման համար որպես CSV ֆայլ: Ահա կոդը, որը թարմացվել է 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();
?>

Այս փոփոխված կոդում.

  • HTTP պատասխանի վերնագրերը թարմացվում են՝ նշելու a text/csv բովանդակության տեսակը, և ֆայլի անվանումն ունի «.csv» ընդլայնում:
  • CSV բովանդակությունը ձեռքով ստեղծելու փոխարեն մենք օգտագործում ենք fputcsv ֆունկցիա՝ յուրաքանչյուր տող դուրս բերելու MySQL արդյունքից, որը սահմանված է որպես CSV տող: Այս գործառույթը մշակում է ձեզ համար CSV ձևաչափումը, ներառյալ հատուկ նիշերի մշակումը և անհրաժեշտության դեպքում դաշտերը կրկնակի չակերտներով փակելը:
  • Մենք բացում ենք ելքային ֆայլի բռնակը օգտագործելով fopen որպես ֆայլի անուն՝ «php://output»: Սա մեզ թույլ է տալիս ուղղակիորեն գրել HTTP պատասխանի ելքային հոսքին:
  • Կոդը կառուցված է այնպես, որ CSV արտահանումը արդյունավետ կերպով կարգավորվի և ավարտվելուց հետո փակում է ֆայլի բռնիչը:

Այս կոդը կարտահանի տվյալները MySQL աղյուսակից որպես CSV ֆայլ՝ հեշտացնելով օգտվողներին բացել և աշխատել աղյուսակային հավելվածներում, ինչպիսին է Excel-ը: Մի մոռացեք փոխարինել տվյալների բազայի հավատարմագրերը ձեր սեփականով:

Douglas Karr

Douglas Karr -ի CMO-ն է OpenINSIGHTS և հիմնադիրը Martech Zone. Դուգլասը օգնել է MarTech-ի տասնյակ հաջողակ ստարտափների, աջակցել է ավելի քան 5 միլիարդ դոլարի չափով Martech-ի ձեռքբերումների և ներդրումների պատշաճ ուսումնասիրությանը և շարունակում է աջակցել ընկերություններին իրենց վաճառքի և շուկայավարման ռազմավարությունների իրականացման և ավտոմատացման գործում: Դուգլասը միջազգայնորեն ճանաչված թվային փոխակերպման և MarTech փորձագետ և խոսնակ է: Դուգլասը նաև Դումմիի ուղեցույցի և բիզնեսի առաջնորդության գրքի հրատարակված հեղինակ է:

Առնչվող հոդվածներ

Վերադառնալ սկիզբ կոճակը
փակել

Հայտնաբերվել է Adblock

Martech Zone կարող է անվճար տրամադրել ձեզ այս բովանդակությունը, քանի որ մենք դրամայնացնում ենք մեր կայքը գովազդից ստացված եկամուտների, փոխկապակցված հղումների և հովանավորությունների միջոցով: Մենք երախտապարտ կլինենք, եթե մեր կայքը դիտելիս հեռացնեիք ձեր գովազդային արգելափակիչը: