PHP və MySQL: Sorğunu Tabla ayrılmış bir fayla göndərin

mysql php loqotipləri

Bu həftə sonu hər hansı bir sorğu və ya cədvəlin bir Tab ilə ayrılmış bir sənəddə ehtiyat nüsxəsini çıxaracaq bir səhifə yaratmaq istədim. Şəbəkədəki nümunələrin əksəriyyətində sütunlar sərt kodlanmışdır.

Mənim vəziyyətimdə sütunların dinamik olmasını istəyirdim, ona görə əvvəlcə sütun adları ilə başlıq sətirini qurmaq üçün bütün cədvəl sahəsi adlarının arasından keçməli və sonra qalan məlumat sətirləri üçün bütün qeydlərin arasından keçməli idim. Ayrıca başlığı elə qurdum ki, brauzer filetype (txt) fayl tarixini və zaman damğasını vuraraq fayl yükləməyə başlayacaq.

Verilənlər bazasının açıq və bağlanma bağlantısını tərk etdim, amma nəticədə olduqca yaxşı işləyən kod var:

$ bu gün = tarix ("YmdHi");
başlıq ("Məzmun tipi: tətbiq / octet-axın");
başlıq ("Məzmun-Sərəncam: əlavə; fayl adı = \" ". $ bu gün." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` order by `myorder`";
$ result = mysql_query ($ sorğu);
$ count = mysql_num_rows ($ nəticə);
$ sahələri = mysql_num_fields ($ nəticə);
$ data = "";
üçün ($ i = 0; $ i> $ sahələri; $ i ++) {
$ field = mysql_fetch_field ($ nəticə, $ i);
$ data. = $ field-> name;
$ data. = "\ t";
}
$ data. = "\ n";
while ($ sıra = mysql_fetch_row ($ nəticə)) {
üçün ($ x = 0; $ x> $ sahələri; $ x ++) {
$ field-> name = $ row [$ x];
$ data. = $ field-> name = $ row [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

Kod vergüllə ayrılmış dəyərlər üçün də asanlıqla dəyişdirilə bilər.

14 Şərhlər

  1. 1

    Sadəcə edə bilməzsiniz:

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

    ?

    • 2

      Güman edirəm ki, edə bilərsən!

      Bu halda, mən əslində veb proqramda 'ehtiyat' linki qururdum, ona görə də PHP funksionallığı mənə lazım olan şeydir. Bununla belə, mən heç bilmirdim ki, siz MySQL ifadəsindən birbaşa fayla da yaza bilərsiniz. Cox sərin!

      Thanks!

      • 3

        MySQL serveri uzaq bir maşında olarsa, sizin yolunuz, əlbəttə ki, ən yaxşı yol olardı, çünki o, yəqin ki, PHP-nin işlədiyi maşına yaza bilməyəcək 🙂

        Digər istiqamətləri və yeni şeyləri qeyd etməkdən məmnunam 🙂

      • 4

        Lakin siz sadəcə olaraq sorğunu fayla işlədə və sadəcə olaraq brauzeri yaradılan fayla yönləndirə və ya hər şey uğursuz olarsa, PHP-nin “readfile” indən istifadə edə bilərsiniz?

        Əlbəttə ki, mysql serverinin fayl sisteminə çıxışı yoxdursa, bunu edə bilməyəcəksiniz...

  2. 5

    Əla post. Nişanla ayrılmış faylı (indicə yaratdığınız kimi) yenidən mysql db-yə idxal etmək/bərpa etmək üçün asan, pulsuz/açıq mənbə üsulunu bilirsinizmi?

    • 6

      Errr... mysqlimport?

      mysqlimport database_name --local backup.txt

      Və ya SQL əmri ilə:

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

      Mysqlimport ilə fayl adı cədvəl adına uyğun gəlməlidir (sadəcə diqqət etməli olduğunuz bir şey)

    • 7
  3. 8

    Internet Explorer 6/6-nin niyə "html" fayl növünü tətbiq etdiyini və başlıqlarda göstərilən xüsusi fayl adlarımı qəbul etmədiyini və həmçinin faylların saxlanmasına icazə vermədiyini anlamağa çalışaraq, sadəcə olaraq, həyatımın 7 saatından çoxunu itirmişəm. istifadəçilərin yuxarıdakılara bənzər şəkildə yaradılmış mətn fayllarını endirməsinə cəhd etmək.

    Mən HTTPS istifadə edirdim və IE bu faylları keş saxlamır.

    Mən həllini Brandon K-nin şərhində tapdım http://uk.php.net/header.

    O deyir:

    -
    PDF faylını PHP vasitəsilə Internet Explorer 6-ya göndərmək üçün aşağıdakı üsuldan istifadə etməyə çalışaraq həyatımın altı saatını itirdim:

    SSL istifadə edərkən, Internet Explorer Açıq / Saxla dialoqu ilə müraciət edəcək, lakin sonra "Fayl hazırda əlçatan deyil və ya tapmaq mümkün deyil" deyir. Zəhmət olmasa bir az sonra yenə cəhd edin." Çox axtarışdan sonra “SSL üzərindən Internet Explorer fayl yükləmələri keş nəzarət başlıqları ilə işləmir” adlı aşağıdakı MSKB məqaləsindən xəbərdar oldum (KBID: 323308)

    PHP.INI standart olaraq parametrdən istifadə edir: session.cache_limiter = “nocache” seçimlərini daxil etmək üçün Content-Cache və Pragma başlıqlarını dəyişdirən nocache. Siz PHP.INI-də “nocache”i “public” və ya “private” olaraq dəyişdirməklə IE xətasını aradan qaldıra bilərsiniz — Bu, Content-Cache başlığını dəyişməklə yanaşı, Pragma başlığını tamamilə siləcək. Əgər siz PHP.INI-ni sayt boyu düzəliş üçün dəyişdirə bilmirsinizsə və ya dəyişdirmək istəmirsinizsə, defoltların üzərinə yazmaq üçün aşağıdakı iki başlığı göndərə bilərsiniz:

    Bunun işləməsi üçün hələ də məzmun başlıqlarını yuxarıda sadalanan kimi təyin etməlisiniz. Nəzərə alın ki, bu problem YALNIZ Internet Explorer-ə təsir edir, Firefox isə bu qüsurlu davranışı nümayiş etdirmir.
    -

    Yaxşı .. ən azı cəmi 6 saat itirdi ...

  4. 9

    Bu yaxşı işləyir. Bununla belə, mən hər şeyi boşluqla ayrılmış bir sətirdə əldə edirəm. Hər şeyi bu kimi ayrı bir sətirdə çap etmək üçün onu dəyişdirməyə çalışıram:

    Sütun1_adı
    Sahə1_dəyəri
    Sütun2_adı
    Sahə1_dəyəri
    Sütun3_adı
    Sahə1_dəyəri

    Sütun1_adı
    Sahə2_dəyəri
    Sütun2_adı
    Sahə2_dəyəri
    Sütun3_adı
    Sahə2_dəyəri

    Misal üçün:

    ad
    Mike
    Yer

    Nömrə
    1

    ad
    Məhkəmə qaydası ilə təqib etmək
    Yer
    Əsas səhifə
    Nömrə
    2

    ad
    John
    Yer
    səyahət
    Nömrə
    10

    və s. Bunu etmək üçün bu skript dəyişdirilə bilərmi?
    Thanks!

    • 10

      Əlbəttə bilər.

      Buna bənzər bir şeyi sınayın:

      MyTableName-dən * SEÇİN OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' SAHƏLƏRİ '\n' TARAFINDAN XİTAM EDİLƏN '\n' SƏTİRLƏR İLƏ SONLANDIRAN;

      Qeyd qrupları arasında ikiqat boşluq (iki boş sətir) istəyirsinizsə, sadəcə olaraq “'\n\n' TARAFINDAN SON VERİLƏN SƏTİRLƏR;” deyin. əvəzinə.

      “'\n' TARAFINDAN XİTAM EDİLƏN SAHƏLƏR” hissəsi hər qeyddən sonra tab yerinə yeni sətir qoyan şeydir. Bunun əvəzinə nişan '\t' olardı.

      Maranatha!

  5. 11

    bu qətiyyən əla yazıdır, mən bunu sınadım və əla işləyirəm, yeganə şey odur ki, mənim txt faylım başlıq başlıqlarının üstündə əlavə cərgəyə malikdir və bəzi nəticələr 2 cərgədə ayrılıb, buna məndə olan məlumatlar səbəb ola bilər. Verilənlər bazamda heç bir fikrim yoxdur, lakin bu, lentlər yaratmaq üçün böyük köməkdir...

  6. 12

    Douglas Karr kodunuz həqiqətən şoka düşür! Bu, xüsusilə mətn faylı formatında olan bir çıxışa ehtiyacınız olduqda çox faydalıdır. Çox sağ olun! Filippin komandasından!

  7. 13

    hey orda! Buradan mənə php-ni ön tərəfim kimi istifadə edərək verilənlər bazasıma (phpmyAdmin) mətn faylını idxal etmək barədə ipucu verə biləcək kimsə varmı? Faylı endirmək və onu açmaq haqqında bir fikrim var, mənim problemim odur ki, sıra nəticəsini necə əldə edə bilərəm və onu cədvəllərimə necə daxil edə bilərəm, təşəkkürlər

  8. 14

    Zəhmət olmasa kimsə mənə başlıq başlıqlarının üstündəki http başlıq cərgəsini necə silməyi izah edə bilər

Siz nə düşünürsünüz?

Bu sayt spam azaldılması üçün Akismet istifadə edir. Yorumunuzun necə işləndiyini öyrənin.