PHP un MySQL: eksportējiet vaicājumu uz tabulēšanas vai CSV failu
Šajā nedēļas nogalē es gribēju uzbūvēt a PHP lapa, kas dublētu jebkuru MySQL vaicājumu vai tabulu ar tabulēšanas atdalītu failu. Lielākajai daļai tīklā pieejamo piemēru kolonnas ir kodētas.
Manā gadījumā es vēlējos, lai kolonnas būtu dinamiskas, tāpēc man vispirms bija jāiziet cauri visiem tabulas lauku nosaukumiem, lai izveidotu galvenes rindu ar kolonnu nosaukumiem, un pēc tam cilpu cauri visiem ierakstiem atlikušajām datu rindām. Es arī iestatīju galveni tā, lai pārlūkprogramma sāktu faila lejupielādi faila tipā (txt) ar faila nosaukumu un laika zīmogu.
Ar cilni atdalīts eksports no 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();
?>
Soli pa solim apskatīsim kodu ar katras daļas skaidrojumiem:
<?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);
}
- Mēs ģenerējam pašreizējo datumu un laiku “YmdHi” formātā un saglabājam to
$today
mainīgs. - HTTP galvenes ir iestatītas, lai norādītu, ka saturs ir jāuzskata par okteta straumi (binārie dati) un aktivizē faila lejupielādi ar norādīto faila nosaukumu.
- Izmantojot paplašinājumu, mēs izveidojam MySQL datu bāzes savienojumu, aizstājot vietturus ar jūsu faktiskajiem datu bāzes akreditācijas datiem.
- Mēs pārbaudām, vai datu bāzes savienojums bija veiksmīgs. Mēs pārtraucam skriptu un parādām kļūdas ziņojumu, ja rodas kļūda.
// 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";
- Mēs definējam SQL vaicājumu, lai atlasītu visus datus no
mytable
galds, pasūtot to pēcmyorder
kolonna. - Vaicājums tiek izpildīts, un rezultāts tiek saglabāts mapē
$result
mainīgs. - Mēs pārbaudām, vai ir atgrieztas rindas, pārbaudot
num_rows
rezultāta objekta īpašība. - Mēs izmantojam
fetch_fields()
lai izgūtu lauku (kolonnu) nosaukumus un saglabātu tos mapē$fields
masīvs. - Eksporta faila galvenes rinda tiek sagatavota, pārskatot lauku nosaukumus un savienojot tos ar cilnēm.
// 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";
}
- Mēs izmantojam a
while
cilpa, lai iegūtu katru datu rindu no rezultātu kopas, izmantojotfetch_assoc()
. - Cilpas iekšpusē mēs sagatavojam katras rindas vērtības, atkārtojot laukus un apkopojot atbilstošos datus.
- Katras rindas vērtības tiek savienotas ar tabulēšanas zīmēm, lai izveidotu ar tabulēšanu atdalītu rindu, un šī rinda tiek pievienota
$data
mainīgs.
// 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();
?>
- Ja ir atrasti dati (pārbaudīts ar
num_rows
), mēs atkārtojam savienotos datus, kas ir eksporta faila saturs. Tas aktivizē faila lejupielādi lietotāja pārlūkprogrammā. - Ja dati netiek atrasti, tiek parādīts ziņojums, kas norāda, ka dati nav pieejami.
- Mēs aizveram MySQL datu bāzes savienojumu, izmantojot
$conn->close()
atbrīvot resursus.
Šis kods efektīvi eksportē datus no MySQL datu bāzes tabulas ar cilnēm atdalītā teksta failā un apstrādā dažādus scenārijus, piemēram, datu bāzes savienojuma kļūdas un tukšas rezultātu kopas.
Komatatdalīto vērtību eksportēšana no MySQL PHP
Es varu modificēt kodu, lai eksportētu datus kā CSV failu. Šis ir kods, kas atjaunināts CSV eksportēšanai:
<?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();
?>
Šajā modificētajā kodā:
- HTTP atbildes galvenes tiek atjauninātas, lai norādītu a
text/csv
satura tipu, un faila nosaukumam ir paplašinājums “.csv”. - Tā vietā, lai manuāli izveidotu CSV saturu, mēs izmantojam
fputcsv
funkcija, lai izvadītu katru rindu no MySQL rezultātu kopas kā CSV rindiņu. Šī funkcija apstrādā CSV formatējumu jūsu vietā, tostarp apstrādā speciālās rakstzīmes un vajadzības gadījumā ievieto laukus dubultpēdiņās. - Mēs atveram izvades faila rokturi, izmantojot
fopen
ar 'php://output' kā faila nosaukumu. Tas ļauj mums rakstīt tieši HTTP atbildes izvades straumē. - Kods ir strukturēts tā, lai efektīvi apstrādātu CSV eksportu, un, kad tas ir paveikts, tiek aizvērts faila rokturis.
Šis kods eksportēs datus no MySQL tabulas kā CSV failu, tādējādi lietotājiem atvieglojot atvēršanu un darbu ar izklājlapu lietojumprogrammām, piemēram, Excel. Neaizmirstiet aizstāt datu bāzes akreditācijas datus ar saviem.