Осы демалыс күндері мен салғым келді 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
MySQL нәтижелері жиынынан CSV жолы ретінде әр жолды шығару функциясы. Бұл функция сізге арнайы таңбаларды өңдеуді және қажет болған жағдайда қос тырнақшаға өрістерді алуды қоса алғанда, CSV пішімдеуін өңдейді. - көмегімен шығыс файлының дескрипторын ашамыз
fopen
файл атауы ретінде 'php://output' арқылы. Бұл HTTP жауап шығыс ағынына тікелей жазуға мүмкіндік береді. - Код CSV экспортын тиімді өңдеу үшін құрылымдалған және аяқталғаннан кейін файл өңдегішін жабады.
Бұл код MySQL кестесіндегі деректерді CSV файлы ретінде экспорттайды, бұл пайдаланушыларға Excel сияқты электрондық кесте қолданбаларында ашуды және олармен жұмыс істеуді жеңілдетеді. Дерекқордың тіркелгі деректерін өзіңіздікімен ауыстыруды ұмытпаңыз.