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-ը: Մի մոռացեք փոխարինել տվյալների բազայի հավատարմագրերը ձեր սեփականով: