CRM ແລະແພລະຕະຟອມຂໍ້ມູນ

PHP ແລະ MySQL: ສົ່ງອອກແບບສອບຖາມໄປຫາ Tab Delimited ຫຼື CSV File

ທ້າຍອາທິດນີ້, ຂ້ອຍຕ້ອງການສ້າງ PHP ຫນ້າທີ່ຈະສໍາຮອງຂໍ້ມູນໃດໆ MySQL ສອບຖາມຫຼືຕາຕະລາງເຂົ້າໄປໃນໄຟລ໌ Tab Delimited. ຕົວຢ່າງສ່ວນໃຫຍ່ຢູ່ໃນສຸດທິມີຄໍລໍາທີ່ມີລະຫັດຍາກ.

ໃນກໍລະນີຂອງຂ້ອຍ, ຂ້ອຍຕ້ອງການຄໍລໍາເປັນແບບເຄື່ອນໄຫວ, ດັ່ງນັ້ນຂ້ອຍຕ້ອງທໍາອິດ loop ຜ່ານຊື່ພາກສະຫນາມຕາຕະລາງທັງຫມົດເພື່ອສ້າງແຖວຫົວດ້ວຍຊື່ຖັນແລະຫຼັງຈາກນັ້ນ loop ຜ່ານບັນທຶກທັງຫມົດສໍາລັບແຖວຂໍ້ມູນທີ່ຍັງເຫຼືອ. ຂ້ອຍຍັງຕັ້ງ header ເພື່ອວ່າຕົວທ່ອງເວັບຈະລິເລີ່ມການດາວໂຫລດໄຟລ໌ໃນປະເພດໄຟລ໌ (txt) ທີ່ມີຊື່ຂອງໄຟລ໌ວັນທີແລະເວລາ.

Tab Delimited Export ຈາກ 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 ຂບວນ.
  • ແຖວຫົວສໍາລັບໄຟລ໌ສົ່ງອອກແມ່ນກະກຽມໂດຍການ looping ຜ່ານຊື່ພາກສະຫນາມແລະ concatenating ໃຫ້ເຂົາເຈົ້າມີແຖບ.
    // 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 loop ເພື່ອດຶງຂໍ້ມູນແຕ່ລະແຖວຈາກຊຸດຜົນໄດ້ຮັບໂດຍໃຊ້ fetch_assoc().
  • ພາຍໃນ loop, ພວກເຮົາກະກຽມຄ່າຂອງແຕ່ລະແຖວໂດຍ iterating ຜ່ານພາກສະຫນາມແລະເກັບກໍາຂໍ້ມູນທີ່ສອດຄ້ອງກັນ.
  • ຄ່າຂອງແຕ່ລະແຖວແມ່ນສົມທົບກັບແຖບເພື່ອສ້າງແຖວທີ່ຂັ້ນດ້ວຍແຖບ, ແລະແຖວນີ້ຈະຖືກເພີ່ມໃສ່ $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), ພວກເຮົາ echo ຂໍ້ມູນ concatenated, ຊຶ່ງເປັນເນື້ອໃນຂອງໄຟລ໌ສົ່ງອອກ. ນີ້ກະຕຸ້ນການດາວໂຫຼດໄຟລ໌ໃນຕົວທ່ອງເວັບຂອງຜູ້ໃຊ້.
  • ຖ້າບໍ່ພົບຂໍ້ມູນ, ພວກເຮົາສະແດງຂໍ້ຄວາມທີ່ສະແດງໃຫ້ເຫັນວ່າບໍ່ມີຂໍ້ມູນ.
  • ພວກເຮົາປິດການເຊື່ອມຕໍ່ຖານຂໍ້ມູນ 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. Douglas ໄດ້ຊ່ວຍເຫຼືອຜູ້ເລີ່ມຕົ້ນ MarTech ຫຼາຍໆຄົນທີ່ປະສົບຜົນສໍາເລັດ, ໄດ້ຊ່ວຍເຫຼືອໃນຄວາມພາກພຽນອັນເນື່ອງມາຈາກຫຼາຍກວ່າ $ 5 ຕື້ໃນການຊື້ແລະການລົງທຶນ Martech, ແລະສືບຕໍ່ຊ່ວຍເຫຼືອບໍລິສັດໃນການປະຕິບັດແລະອັດຕະໂນມັດຍຸດທະສາດການຂາຍແລະການຕະຫຼາດຂອງພວກເຂົາ. Douglas ແມ່ນການຫັນເປັນດິຈິຕອນທີ່ໄດ້ຮັບການຍອມຮັບໃນລະດັບສາກົນແລະຜູ້ຊ່ຽວຊານ MarTech ແລະລໍາໂພງ. Douglas ຍັງເປັນຜູ້ຂຽນທີ່ພິມເຜີຍແຜ່ຂອງຄູ່ມືຂອງ Dummie ແລະຫນັງສືຜູ້ນໍາທາງທຸລະກິດ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ

ກັບໄປດ້ານເທິງສຸດ
ປິດ

ກວດພົບ Adblock

Martech Zone ສາມາດສະໜອງເນື້ອຫານີ້ໃຫ້ກັບເຈົ້າໄດ້ໂດຍບໍ່ເສຍຄ່າໃຊ້ຈ່າຍໃດໆ ເພາະວ່າພວກເຮົາສ້າງລາຍໄດ້ຈາກເວັບໄຊຂອງພວກເຮົາຜ່ານລາຍໄດ້ໂຄສະນາ, ລິ້ງເຊື່ອມໂຍງ ແລະສະປອນເຊີ. ພວກ​ເຮົາ​ຈະ​ຮູ້​ສຶກ​ດີ​ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ຈະ​ເອົາ​ຕົວ​ບລັອກ​ການ​ໂຄ​ສະ​ນາ​ຂອງ​ທ່ານ​ທີ່​ທ່ານ​ເບິ່ງ​ເວັບ​ໄຊ​ຂອງ​ພວກ​ເຮົາ.