PHP dan MySQL: Mengekspor Kueri ke File Tab Delimited

logo php mysql

Akhir pekan ini saya ingin membuat halaman yang hanya akan mencadangkan kueri atau tabel apa pun ke dalam file Tab Delimited. Sebagian besar contoh di internet memiliki kolom hard-code.

Dalam kasus saya, saya ingin kolom menjadi dinamis jadi saya harus mengulang pertama melalui semua nama bidang tabel untuk membangun baris header dengan nama kolom, dan kemudian mengulang semua catatan untuk baris data yang tersisa. Saya juga mengatur header sehingga browser akan memulai pengunduhan file di filetype (txt) dengan nama tanggal file dan cap waktu.

Saya meninggalkan database membuka dan menutup koneksi, tetapi inilah kode yang dihasilkan yang bekerja dengan cukup baik:

$ hari ini = tanggal ("YmdHi");
header ("Jenis konten: application / octet-stream");
header ("Content-Disposition: attachment; filename = \" ". $ today." _ Backup.txt \ "");
$ query = "PILIH * DARI` mytable` order by `myorder`";
$ result = mysql_query ($ query);
$ count = baris_saya ($ hasil);
$ bidang = mysql_num_fields ($ hasil);
$ data = "";
untuk ($ i = 0; $ i> $ ladang; $ i ++) {
$ field = mysql_fetch_field ($ hasil, $ i);
$ data. = $ field-> nama;
$ data. = "\ t";
}
$ data. = "\ n";
while ($ row = mysql_fetch_row ($ result)) {
untuk ($ x = 0; $ x> $ bidang; $ x ++) {
$ field-> nama = $ baris [$ x];
$ data. = $ bidang-> nama = $ baris [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

Kode dapat dengan mudah dimodifikasi untuk nilai yang dipisahkan koma juga.

14 Komentar

  1. 1

    Tidak bisakah Anda melakukan:

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

    ?

    • 2

      Saya rasa Anda bisa!

      Dalam hal ini, saya sebenarnya sedang membangun tautan 'cadangan' di aplikasi web, jadi fungsionalitas PHP adalah yang saya butuhkan. Namun, saya tidak pernah tahu Anda juga bisa menulis ke file langsung dari pernyataan MySQL. Sangat keren!

      Terima kasih!

      • 3

        Cara Anda tentu saja akan menjadi cara terbaik jika server MySQL berada di mesin jarak jauh, karena mungkin tidak akan dapat menulis ke mesin tempat PHP dijalankan 🙂

        Senang menunjukkan arah lain dan hal-hal baru 🙂

      • 4

        Tapi Anda bisa menjalankan kueri ke file, dan mengarahkan browser ke file yang dihasilkan, atau menggunakan "readfile" PHP jika semuanya gagal?

        Anda tidak akan dapat melakukannya jika server mysql tidak memiliki akses ke sistem file tentunya…

  2. 5

    Pos yang bagus. Apakah Anda mengetahui metode yang mudah, gratis / sumber terbuka untuk mengimpor / memulihkan file yang dibatasi tab (seperti yang baru saja Anda buat) kembali ke db mysql?

    • 6

      Errr… mysqlimport?

      mysqlimport database_name --local backup.txt

      Atau dengan perintah SQL:

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

      Dengan mysqlimport, nama file harus sesuai dengan nama tabel (hanya perlu diperhatikan)

    • 7
  3. 8

    Saya baru saja kehilangan lebih dari 6 jam hidup saya mencoba mencari tahu mengapa Internet Explorer 6/7 menerapkan jenis file 'html' dan dan tidak menerima nama file khusus saya yang ditentukan di tajuk .. dan juga tidak mengizinkan file untuk disimpan .. saat berusaha agar pengguna mengunduh file teks yang dibuat dengan cara yang mirip di atas.

    Saya menggunakan HTTPS dan IE tidak menyimpan file ini ke cache.

    Saya menemukan solusinya pada komentar oleh Brandon K di http://uk.php.net/header.

    Dia mengatakan:

    -
    Saya baru saja kehilangan enam jam hidup saya mencoba menggunakan metode berikut untuk mengirim file PDF melalui PHP ke Internet Explorer 6:

    Saat menggunakan SSL, Internet Explorer akan menampilkan dialog Buka / Simpan, tetapi kemudian mengatakan “File saat ini tidak tersedia atau tidak dapat ditemukan. Silakan coba lagi nanti. ” Setelah banyak pencarian, saya mengetahui artikel MSKB berikut yang berjudul "Download file Internet Explorer melalui SSL tidak berfungsi dengan header kontrol cache" (KBID: 323308)

    PHP.INI secara default menggunakan pengaturan: session.cache_limiter = nocache yang mengubah header Content-Cache dan Pragma untuk menyertakan opsi "nocache". Anda dapat menghilangkan kesalahan IE dengan mengubah "nocache" menjadi "publik" atau "pribadi" di PHP.INI - Ini akan mengubah header Content-Cache serta menghapus header Pragma sepenuhnya. Jika Anda tidak dapat atau tidak ingin mengubah PHP.INI untuk perbaikan di seluruh situs, Anda dapat mengirim dua header berikut untuk menimpa default:

    Anda masih perlu menyetel header konten seperti yang tercantum di atas agar ini berfungsi. Harap dicatat masalah ini HANYA mempengaruhi Internet Explorer, sedangkan Firefox tidak menunjukkan perilaku yang cacat ini.
    —-

    Yah .. setidaknya dia hanya tersesat 6 jam…

  4. 9

    Ini bekerja dengan baik. Namun, saya hanya mendapatkan semuanya dalam satu baris yang dipisahkan oleh spasi. Saya mencoba memodifikasinya untuk mencetak semuanya pada baris terpisah seperti ini:

    kolom1_nama
    bidang1_nilai
    kolom2_nama
    bidang1_nilai
    kolom3_nama
    bidang1_nilai

    kolom1_nama
    bidang2_nilai
    kolom2_nama
    bidang2_nilai
    kolom3_nama
    bidang2_nilai

    Sebagai contoh:

    Nama
    Mike
    tempat
    Kerja
    Jumlah
    1

    Nama
    Menggugat
    tempat
    Home
    Jumlah
    2

    Nama
    John
    tempat
    Perjalanan
    Jumlah
    10

    dan seterusnya. Bisakah skrip ini dimodifikasi untuk melakukannya?
    Terima kasih!

    • 10

      Tentu bisa.

      Coba sesuatu seperti ini:

      SELECT * dari MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' BIDANG DIHENTIKAN OLEH '\ n' LINES DIHENTIKAN OLEH '\ n';

      Jika Anda menginginkan spasi ganda (dua baris kosong) di antara grup rekaman, cukup ucapkan "LINES TERMINATED BY '\ n \ n';" sebagai gantinya.

      Bagian "FIELDS DIHENTIKAN OLEH '\ n'" adalah yang menempatkan baris baru setelah setiap record, bukan tab. Tab akan menjadi '\ t' sebagai gantinya.

      Maranatha!

  5. 11

    Ini jelas posting yang bagus, saya mencobanya dan berfungsi dengan baik, satu-satunya hal adalah file txt saya memiliki baris tambahan di atas judul header, dan beberapa hasil dipisahkan dalam 2 baris, ini mungkin disebabkan oleh data yang saya miliki di Database saya tidak tahu, tapi ini sangat membantu untuk membuat feed…

  6. 12

    Douglas Karr kode Anda benar-benar keren! Ini sangat berguna khususnya jika Anda hanya membutuhkan output dalam format textfile. Terima kasih banyak! Dari tim Filipina!

  7. 13

    hai yang disana! Apakah ada seseorang dari sini yang dapat memberi saya petunjuk tentang mengimpor file teks ke database saya (phpmyAdmin) menggunakan php saya sebagai ujung depan saya. Saya punya ide tentang mengunduh file dan membukanya, masalah saya adalah bagaimana saya bisa mendapatkan hasil baris dan cara memasukkannya ke dalam tabel saya, terima kasih

  8. 14

Bagaimana menurut Anda?

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.