PHP kaj MySQL: Eksportu Demandon al Tab Limigita aŭ CSV-Dosiero
Ĉi-semajnfine, mi volis konstrui a PHP paĝo kiu sekurigus iun ajn MySQL konsulto aŭ tabelo en Tab Limigitan dosieron. La plej multaj el la ekzemploj en la reto havas la kolumnojn malfacile kodigitaj.
En mia kazo, mi volis, ke la kolumnoj estu dinamikaj, do mi devis unue trarigardi ĉiujn tabelajn kamponomojn por konstrui la kaplinion kun kolumnomoj kaj poste trarigardi ĉiujn rekordojn por la ceteraj datumvicoj. Mi ankaŭ agordis la kaplinion por ke la retumilo komencu la dosier-elŝuton en la dosiertipo (txt) kun la nomo de la dosierdato kaj tempostampita.
Tab Limigita Eksporto El MySQL en 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();
?>
Ni trairu la kodon paŝon post paŝo kun klarigoj por ĉiu parto:
<?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);
}
- Ni generas la aktualan daton kaj horon en la formato "YmdHi" kaj konservas ĝin en la
$today
variablo. - HTTP-titoloj estas fiksitaj por specifi, ke la enhavo estu traktata kiel okteto-rivereto (binaraj datumoj) kaj ekigi dosier-elŝuton kun la specifita dosiernomo.
- Uzante la etendon, ni kreas MySQL-datumbazan konekton, anstataŭigante anstataŭaĵojn per viaj realaj datumbazaj akreditaĵoj.
- Ni kontrolas ĉu la datumbaza konekto sukcesis. Ni finas la skripton kaj montras erarmesaĝon se estas eraro.
// 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";
- Ni difinas la SQL-demandon por elekti ĉiujn datumojn el la
mytable
tablo, ordigante ĝin per lamyorder
Kolumno. - La demando estas efektivigita, kaj la rezulto estas konservita en la
$result
variablo. - Ni kontrolas ĉu estas iuj vicoj resenditaj ekzamenante la
num_rows
eco de la rezulta objekto. - Ni uzas
fetch_fields()
por preni la kampojn (kolumnojn) nomojn kaj konservi ilin en la$fields
tabelo. - La kaplinio por la eksportdosiero estas preparita per buklo tra la kamponomoj kaj kunligante ilin per langetoj.
// 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";
}
- Ni uzas a
while
buklo por preni ĉiun datuman vicon de la rezulta aro uzantefetch_assoc()
. - Ene de la buklo, ni preparas la valorojn de ĉiu vico per ripetado tra la kampoj kaj kolektante la respondajn datumojn.
- La valoroj por ĉiu vico estas kunligitaj kun langetoj por krei langeton-limigitan vicon, kaj ĉi tiu vico estas aldonita al la
$data
variablo.
// 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();
?>
- Se estas datumoj trovitaj (kontrolitaj per
num_rows
), ni eĥas la kunligitajn datumojn, kiu estas la enhavo de la eksportdosiero. Ĉi tio ekigas la elŝuton de dosiero en la retumilo de la uzanto. - Se neniuj datumoj estas trovitaj, ni montras mesaĝon indikante, ke neniuj datumoj estas haveblaj.
- Ni fermas la MySQL-datumbazan konekton uzante
$conn->close()
liberigi rimedojn.
Ĉi tiu kodo efike eksportas datumojn de MySQL-datumbaza tabelo en tabul-limigitan tekstdosieron kaj pritraktas diversajn scenarojn, kiel datumbazkonekto-eraroj kaj malplenaj rezultaj aroj.
Komo-Separataj Valoroj Eksportu De MySQL en PHP
Mi povas modifi la kodon por eksporti datumojn kiel CSV-dosieron. Jen la kodo, ĝisdatigita por CSV-eksporto:
<?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();
?>
En ĉi tiu modifita kodo:
- La kaplinioj por la HTTP-respondo estas ĝisdatigitaj por specifi a
text/csv
enhavotipo, kaj la dosiernomo havas la etendon ".csv". - Anstataŭ mane krei la CSV-enhavon, ni uzas la
fputcsv
funkcio por eligi ĉiun vicon de la MySQL-rezulta aro kiel CSV-linio. Ĉi tiu funkcio pritraktas la CSV-formaton por vi, inkluzive de pritraktado de specialaj signoj kaj enfermado de kampoj inter citiloj kiam necese. - Ni malfermas la eligdosieran tenilon uzante
fopen
kun 'php://output' kiel la dosiernomo. Ĉi tio permesas al ni skribi rekte al la HTTP-responda eligofluo. - La kodo estas strukturita por trakti CSV-eksporton efike kaj fermas la dosiertenilon kiam finite.
Ĉi tiu kodo eksportos la datumojn de la MySQL-tabelo kiel CSV-dosieron, faciligante al uzantoj malfermi kaj labori kun kalkultabelaj aplikaĵoj kiel Excel. Ne forgesu anstataŭigi la datumbazajn akreditaĵojn per viaj propraj.