CRM және деректер платформалары

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

Бұл код MySQL кестесіндегі деректерді CSV файлы ретінде экспорттайды, бұл пайдаланушыларға Excel сияқты электрондық кесте қолданбаларында ашуды және олармен жұмыс істеуді жеңілдетеді. Дерекқордың тіркелгі деректерін өзіңіздікімен ауыстыруды ұмытпаңыз.

Douglas Karr

Douglas Karr негізін қалаушы болып табылады Martech Zone және цифрлық трансформация бойынша танымал сарапшы. Дуглас бірнеше сәтті MarTech стартаптарын бастауға көмектесті, Martech сатып алулары мен инвестицияларына 5 миллиард доллардан астам қаржыны мұқият тексеруге көмектесті және өзінің жеке платформалары мен қызметтерін іске қосуды жалғастыруда. Ол негізін қалаушы Highbridge, цифрлық трансформация бойынша консалтингтік фирма. Дуглас сонымен қатар Dummie's guide және бизнес көшбасшылығы кітабының жарияланған авторы.

Қатысты Мақалалар

13 Пікірлер

    1. Сіздің қолыңыздан келді деп ойлаймын!

      Бұл жағдайда мен веб-қосымшада «резервтік» сілтемені құрдым, сондықтан PHP функциясы маған қажет болды. Алайда мен сіздің файлға MySQL операторынан тікелей жаза алатындығыңызды ешқашан білмеппін. Өте күшті!

      Рахмет!

      1. Егер сіздің жолыңыз әрине, MySQL сервері қашықтағы машинада болса, ең жақсы әдіс болар еді, өйткені ол PHP жұмыс істеп тұрған машинада жаза алмайтын шығар 🙂

        Басқа бағыттар мен жаңа нәрселерді атап өткеніме қуаныштымын 🙂

  1. Керемет пост. Қойындылармен бөлінген файлды (дәл сіз жасаған сияқты) mysql db-ге қайта әкелудің / қалпына келтірудің қарапайым, ақысыз / ашық әдісі туралы білесіз бе?

    1. Қате ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Немесе SQL командасымен:

      LOAD DATA LOCAL INFILE 'backup.txt' INTO TABLE `my_table` FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'

      Mysqlimport көмегімен файл атауы кестенің атына сәйкес келуі керек (тек назар аударатын нәрсе)

  2. Мен Internet Explorer 6/6 файлының 'html' түрін неге қолданып жатқанын және тақырыпта көрсетілген менің жеке файл аттарымды қабылдамағанымды, сонымен қатар файлдардың сақталуына жол бермейтінімді білуге ​​тырысып, өмірімнің 7 сағаттан астам уақытын жоғалттым. қолданушыларға жоғарыда көрсетілген жолмен жасалған мәтіндік файлдарды жүктеуге мәжбүр ету.

    Мен HTTPS қолдандым, ал IE бұл файлдарды кэштемейді.

    Мен шешімді Брэндон К-ның түсініктемесі бойынша таптым http://uk.php.net/header.

    Ол былай дейді:

    -
    PDF файлын PHP арқылы Internet Explorer 6-ға жіберу үшін мен өмірімнің алты сағатын жоғалттым:

    SSL-ді қолданған кезде Internet Explorer Ашу / Сақтау диалогын ұсынады, бірақ содан кейін «Файл қазір қол жетімді емес немесе табылмады. Тағы жасауды сәл кейінірек көріңізді өтінеміз.» Көп іздеуден кейін мен MSKB-дің «SSL арқылы Internet Explorer файлын жүктеу кэшті басқару тақырыптарымен жұмыс істемейді» атты мақаласынан хабардар болдым (KBID: 323308)

    PHP.INI әдепкі бойынша параметрді қолданады: session.cache_limiter = nocache, ол «nocache» параметрлерін қосу үшін Content-Cache және Pragma тақырыптарын өзгертеді. PHP.INI-де «nocache» -ді «public» немесе «private» етіп өзгерту арқылы IE қатесін жоюға болады - бұл Content-Cache тақырыбын өзгертеді, сонымен қатар Pragma тақырыбын толығымен жояды. Егер сіз PHP.INI-ді жалпыға ортақ түзету үшін өзгерте алмасаңыз немесе қаламасаңыз, әдепкі параметрлерді қайта жазу үшін келесі екі тақырыпты жібере аласыз:

    Бұл жұмыс жасау үшін сізге мазмұнның тақырыптарын жоғарыда көрсетілгендей етіп орнату қажет болады. Бұл мәселені тек Internet Explorer-ге әсер ететінін ескеріңіз, ал Firefox бұл қате әрекеттерді жасамайды.
    -

    Ол, ең болмағанда, ол 6 сағат қана жоғалтты ...

  3. Бұл жақсы жұмыс істейді. Алайда мен бәрін тек бір жолға бос орынмен бөліп аламын. Барлығын бөлек жолға басып шығару үшін оны өзгертуге тырысамын:

    Баған1_атауы
    Өріс_мәні
    Баған2_атауы
    Өріс_мәні
    Баған3_атауы
    Өріс_мәні

    Баған1_атауы
    Өріс_мәні
    Баған2_атауы
    Өріс_мәні
    Баған3_атауы
    Өріс_мәні

    Мысалға:

    Толық аты-жөніңіз
    Майк
    орналасқан жері
    жұмыс
    нөмір
    1

    Толық аты-жөніңіз
    сотқа беру
    орналасқан жері
    Home
    нөмір
    2

    Толық аты-жөніңіз
    Джон
    орналасқан жері
    Саяхат
    нөмір
    10

    және тағы басқа. Бұл сценарийді өзгерту үшін өзгертуге бола ма?
    Рахмет!

    1. Әрине, мүмкін.

      Осындай әрекетті көріңіз:

      MyTableName-ден OUTFILE-ге SELECT * таңдау 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' АЯҚТАЛҒАН АЯҚТАР '' \ n 'АЯҚТАЛҒАН СЫЗЫҚТАР' \ n ';

      Егер сіз жазба топтары арасында екі бос орын (екі бос жол) алғыңыз келсе, жай ғана «'N \ n \ n'; орнына.

      Әрбір жазбадан кейін қойындының орнына жаңа жолды қоятын «ДАЛАЛДАР '' n '' бөлігі. Оның орнына қойынды '\ t' болады.

      Мараната!

  4. бұл өте жақсы жазба, мен оны қолданып көрдім және өте жақсы жұмыс істеймін, тек менің txt файлымда тақырыптың үстінде қосымша жол бар, ал кейбір нәтижелер 2 қатарға бөлінген, бұған мендегі мәліметтер себеп болуы мүмкін менің деректер қорымда бұл туралы ешқандай түсінік жоқ, бірақ бұл арналарды құруға үлкен көмек ...

  5. Douglas Karr сіздің кодыңыз шынымен де әсер етеді! Бұл сізге өте пайдалы, егер сізге тек мәтіндік файл форматындағы нәтиже қажет болса. Көп рақмет! Филиппин командасынан!

  6. сәлем! Осы жерден маған мәтіндік файлды php-ді менің алдымнан пайдаланып, мәліметтер қорына (phpmyAdmin) импорттау туралы кеңес бере алатын біреу бар ма? Менде файлды жүктеу және оны ашу туралы ой бар, менің проблемам жолдың нәтижесін қалай алуға болатындығы және оны кестелеріме қалай енгізу керек, рахмет

Сен не ойлайсың?

Бұл сайт спамның төмендеуі үшін Akismet пайдаланады. Деректеріңіздің қалай өңделетінін біліңіз.

жақын

Adblock анықталды

Martech Zone Сізге бұл мазмұнды ақысыз ұсына алады, өйткені біз сайтымызды жарнамадан түсетін табыс, серіктестік сілтемелері және демеушілік арқылы монетизациялаймыз. Сайтымызды көрген кезде жарнама блокаторын алып тастасаңыз, біз ризамыз.