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 ਫਾਈਲ ਦੇ ਰੂਪ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੇਗਾ, ਜਿਸ ਨਾਲ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਐਕਸਲ ਵਰਗੀਆਂ ਸਪ੍ਰੈਡਸ਼ੀਟ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਖੋਲ੍ਹਣਾ ਅਤੇ ਕੰਮ ਕਰਨਾ ਆਸਾਨ ਹੋ ਜਾਵੇਗਾ। ਡਾਟਾਬੇਸ ਪ੍ਰਮਾਣ ਪੱਤਰਾਂ ਨੂੰ ਆਪਣੇ ਨਾਲ ਬਦਲਣਾ ਨਾ ਭੁੱਲੋ।