PHP және MySQL: сұранысты қойындымен бөлінген файлға экспорттау

PHP логотиптері

Осы демалыс күндері мен кез-келген сұраныстың немесе кестенің сақтық көшірмесін Tab-мен бөлінген файлға салғым келді. Желідегі мысалдардың көпшілігінде бағандар қатты кодталған.

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

Мен дерекқордың ашық және жабылатын байланысын қалдырдым, бірақ міне нәтижелі код өте жақсы жұмыс істеді:

$ бүгін = күн («YmdHi»);
тақырып («Content-type: application / octet-stream»);
тақырып («Мазмұн-диспозиция: тіркеме; файл атауы = \» «. $ бүгін.» _ Backup.txt \ «»);
$ query = «SELECT * FROM` mytable` order by `myorder`»;
$ result = mysql_query ($ сұрау);
$ count = mysql_num_rows ($ нәтиже);
$ өрістер = mysql_num_fields ($ нәтиже);
$ data = «»;
үшін ($ i = 0; $ i> $ өрістері; $ i ++) {
$ field = mysql_fetch_field ($ нәтиже, $ i);
$ data. = $ field-> name;
$ data. = «\ t»;
}
$ data. = «\ n»;
while ($ row = mysql_fetch_row ($ result)) {
үшін ($ x = 0; $ x> $ өрістері; $ x ++) {
$ field-> name = $ row [$ x];
$ data. = $ field-> name = $ row [$ x];
$ data. = «\ t»;
}
$ data. = «\ n»;
}
echo $ data;

Кодты үтірмен бөлінген мәндер үшін де оңай өзгертуге болады.

14 Пікірлер

  1. 1

    Сіз жай жасай алмайсыз ба:

    SELECT `mytable` order by `myorder`
    INTO OUTFILE '/tmp/Backup.txt'
    FIELDS TERMINATED BY '\t'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

    ?

    • 2

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

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

      Рахмет!

      • 3

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

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

      • 4

        Бірақ сіз тек сұранысты файлға жібере аласыз, ал браузерді жасалған файлға қайта бағыттай аласыз немесе PHP-дің «readfile» файлын қолданасыз ба, егер ештеңе шықпаса?

        Егер mysql сервері файлдық жүйеге кіре алмаса, сіз мұны жасай алмайсыз ...

  2. 5

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

    • 6

      Қате ... 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 көмегімен файл атауы кестенің атына сәйкес келуі керек (тек назар аударатын нәрсе)

    • 7
  3. 8

    Мен 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 сағат қана жоғалтты ...

  4. 9

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

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

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

    Мысалға:

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

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

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

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

    • 10

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

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

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

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

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

      Мараната!

  5. 11

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

  6. 12

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

  7. 13

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

  8. 14

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

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