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. ຢ່າລືມປ່ຽນຂໍ້ມູນປະຈໍາຕົວຖານຂໍ້ມູນດ້ວຍຕົວຂອງທ່ານເອງ.