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ı açıq və bağlanma bağlantısını tərk etdim, amma olduqca yaxşı işləyən nəticə kodu:

$ 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əzsənmi:

    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!

      Bu vəziyyətdə, həqiqətən bir veb tətbiqetmə içərisində bir 'ehtiyat' bağlantısı qururdum, buna görə PHP funksiyası mənə lazım olan şeydir. Bununla birlikdə, bir fayla birbaşa MySQL ifadəsindən yaza biləcəyinizi heç bilmirdim. Cox sərin!

      Thanks!

      • 3

        Əlbətdə ki, PHP-nin işlədiyi maşına yaza bilməyəcəyi üçün MySQL serveriniz uzaq bir maşındadırsa, yolunuz ən yaxşı yol olacaqdır.

        Digər istiqamətləri və yeni şeyləri göstərməkdən məmnunam 🙂

      • 4

        Ancaq sorğunu yalnız bir fayla yönləndirə bilər və brauzeri yaradılan fayla yönləndirə bilərsən, ya da heç bir nəticə vermədiyi təqdirdə PHP-nin "readfile" sini istifadə edə bilərsən?

        Mysql serverinin əlbəttə fayl sisteminə girişi yoxdursa bunu edə bilməyəcəksiniz ...

  2. 5

    Mükəmməl yazı. Nişanla ayrılmış bir faylı (yeni yaratdığınız kimi) yenidən mysql db-yə gətirmək / bərpa etmək üçün asan, pulsuz / açıq mənbə metodunu bilirsinizmi?

    • 6

      Səhv ... 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 olmalıdır (diqqət yetirilməli bir şey)

    • 7
  3. 8

    Internet Explorer 6/6-nin filetype 'html' tətbiq etdiyini və başlıqlarda göstərilən xüsusi fayl adlarımı qəbul etmədiyimi öyrənməyə çalışaraq həyatımın 7 saatından çoxunu itirmişəm .. və eyni zamanda faylların saxlanmasına imkan verməmişəm. istifadəçilərin yuxarıdakılara bənzər şəkildə yaradılan mətn sənədlərini yükləmələrini təmin etməyə çalışır.

    HTTPS istifadə edirdim və IE bu faylları önbelleğe almır.

    Çözümü Brandon K-nin bir şərhində tapdım http://uk.php.net/header.

    O deyir:

    -
    PDF sənədini PHP vasitəsilə Internet Explorer 6-ya göndərmək üçün aşağıdakı metodu istifadə edərək həyatımın altı saatını itirdim:

    SSL istifadə edildikdə, Internet Explorer Aç / Saxla informasiya qutusu ilə müraciət edəcək, lakin sonra “Fayl hazırda əlçatan deyil və ya tapıla bilməz. 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 cache nəzarət başlıqları ilə işləmir” başlıqlı aşağıdakı MSKB məqaləsindən xəbərdar oldum (KBID: 323308)

    Varsayılan olaraq PHP.INI bir ayar 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. PHP.INI-də “nocache” i “public” və ya “private” olaraq dəyişdirərək IE səhvini aradan qaldıra bilərsiniz - Bu, Content-Cache başlığını dəyişdirəcək və eyni zamanda Pragma başlığını tamamilə siləcəkdir. PHP.INI-ni sayt boyu düzəltmək üçün dəyişdirə bilmirsinizsə və ya dəyişdirmək istəmirsinizsə, standartları yazmaq üçün aşağıdakı iki başlığı göndərə bilərsiniz:

    Bunun işləməsi üçün yenə də məzmun başlıqlarını yuxarıda sadalandığı kimi təyin etməlisiniz. Xahiş edirəm bu problemi YALNIZ Internet Explorer-ə təsir edin, Firefox bu qüsurlu davranışı göstərmir.
    -

    Yaxşı ... heç olmasa 6 saat itirmişdi ...

  4. 9

    Bu yaxşı işləyir. Bununla birlikdə, hər şeyi yalnız bir boşluqla ayrılmış bir sətirdə əldə edirəm. Hər şeyi ayrı bir sətirdə yazdırmaq üçün dəyişdirməyə çalışıram:

    Sütun1_adı
    Sahə1_ dəyər
    Sütun2_adı
    Sahə1_ dəyər
    Sütun3_adı
    Sahə1_ dəyər

    Sütun1_adı
    Sahə2_ dəyər
    Sütun2_adı
    Sahə2_ dəyər
    Sütun3_adı
    Sahə2_ dəyər

    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ə sair. 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 OUTFILE'DƏ SEÇİN * MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt 'FAYDALANAN SAHƏLƏR' '\ n' SINIRLAR VERİLMİŞ HATLAR '\ n';

      Qeyd qrupları arasında ikiqat boşluq (iki boş sətir) istəyirsinizsə, sadəcə “'\ n \ n'; əvəzinə.

      “'\ N' İLƏ BAĞLANILAN SAHƏLƏR" hissəsi, hər qeyddən sonra nişan əvəzinə yeni sətir qoyan şeydir. Bunun yerinə bir nişan '\ t' olardı.

      Maranatha!

  5. 11

    bu, qətiliklə əla bir yazıdır, onu sınadım və çox yaxşı işləyirdim, tək şey mənim txt faylımın başlıq başlıqlarının üstündə əlavə bir sətir olması və bəzi nəticələrin 2 sətirdə ayrılmasıdır. Mənim Verilənlər Bazamda heç bir fikir yoxdur, amma bu lentlər yaratmaq üçün böyük köməkdir ...

  6. 12

    Douglas Karr kodunuz həqiqətən daşlayır! Yalnız mətn faylı formatında bir çıxışa ehtiyacınız varsa, çox faydalıdır. Çox sağolun! Komandadan Filippinlər!

  7. 13

    hey var! Buradan mənə php-i ön hissəm kimi istifadə edərək mətn sənədini verilənlər bazasına (phpmyAdmin) idxal etmək barədə bir ipucu verə bilən varmı? Bir faylı yükləmək və açmaq barədə bir fikrim var, problemim sətir nəticəsini necə əldə edə biləcəyim və cədvəllərimə necə yerləşdirəcəyimdir, təşəkkürlər

  8. 14

    Xahiş edirəm kimsə mənə başlıq başlıqlarının üstündəki http başlıq sətrini 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.