PHP மற்றும் MySQL: ஒரு டேப் பிரிக்கப்பட்ட அல்லது CSV கோப்பிற்கு வினவலை ஏற்றுமதி செய்யவும்
இந்த வார இறுதியில், நான் ஒரு கட்ட விரும்பினேன் PHP எதையும் காப்புப் பிரதி எடுக்கும் பக்கம் MySQL, டேப் பிரிக்கப்பட்ட கோப்பில் வினவல் அல்லது அட்டவணை. வலையில் உள்ள பெரும்பாலான எடுத்துக்காட்டுகளில் நெடுவரிசைகள் கடின குறியிடப்பட்டவை.
என் விஷயத்தில், நெடுவரிசைகள் மாறும் வகையில் இருக்க வேண்டும் என்று நான் விரும்பினேன், எனவே தலைப்பு வரிசையை நெடுவரிசைப் பெயர்களுடன் உருவாக்க முதலில் அனைத்து அட்டவணைப் புலப் பெயர்களையும் லூப் செய்ய வேண்டும், பின்னர் மீதமுள்ள தரவு வரிசைகளுக்கான அனைத்து பதிவுகளையும் லூப் செய்ய வேண்டும். நான் தலைப்பையும் அமைத்துள்ளேன், அதனால் கோப்பு தேதி மற்றும் நேர முத்திரையுடன் கோப்பு வகை (txt) இல் கோப்பு பதிவிறக்கத்தை உலாவி தொடங்கும்.
PHP இல் MySQL இலிருந்து டேப் பிரிக்கப்பட்ட ஏற்றுமதி
<?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 தலைப்புகள் உள்ளடக்கம் ஆக்டெட் ஸ்ட்ரீம் (பைனரி டேட்டா) ஆகக் கருதப்பட வேண்டும் என்பதைக் குறிப்பிடவும், குறிப்பிட்ட கோப்புப் பெயருடன் கோப்பு பதிவிறக்கத்தைத் தூண்டவும் அமைக்கப்பட்டுள்ளன.
- நீட்டிப்பைப் பயன்படுத்தி, நாங்கள் 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 தரவுத்தள அட்டவணையில் இருந்து டேப்-டிலிமிட்டட் டெக்ஸ்ட் கோப்பில் தரவை திறமையாக ஏற்றுமதி செய்கிறது மற்றும் தரவுத்தள இணைப்பு பிழைகள் மற்றும் வெற்று முடிவுத் தொகுப்புகள் போன்ற பல்வேறு காட்சிகளைக் கையாளுகிறது.
PHP இல் MySQL இலிருந்து கமாவால் பிரிக்கப்பட்ட மதிப்புகள் ஏற்றுமதி
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
CSV வரியாக அமைக்கப்பட்ட MySQL முடிவுகளிலிருந்து ஒவ்வொரு வரிசையையும் வெளியிடுவதற்கான செயல்பாடு. இந்தச் செயல்பாடு உங்களுக்கான CSV வடிவமைப்பைக் கையாளுகிறது, இதில் சிறப்பு எழுத்துக்களைக் கையாளுதல் மற்றும் தேவைப்படும்போது இரட்டை மேற்கோள்களில் புலங்களை இணைத்தல் ஆகியவை அடங்கும். - வெளியீட்டு கோப்பு கைப்பிடியைப் பயன்படுத்தி திறக்கிறோம்
fopen
கோப்பு பெயராக 'php://output' உடன். இது HTTP மறுமொழி வெளியீட்டு ஸ்ட்ரீமில் நேரடியாக எழுத அனுமதிக்கிறது. - CSV ஏற்றுமதியை திறமையாக கையாளும் வகையில் குறியீடு கட்டமைக்கப்பட்டுள்ளது மற்றும் முடிந்ததும் கோப்பு கைப்பிடியை மூடுகிறது.
இந்தக் குறியீடு MySQL டேபிளிலிருந்து தரவை CSV கோப்பாக ஏற்றுமதி செய்யும், இதனால் பயனர்கள் Excel போன்ற விரிதாள் பயன்பாடுகளைத் திறந்து வேலை செய்வதை எளிதாக்குகிறது. உங்கள் சொந்த தரவுத்தள நற்சான்றிதழ்களை மாற்ற மறக்காதீர்கள்.