PHP dan MySQL: Eksport Pertanyaan ke Fail Terhad Tab

logo mysql php

Hujung minggu ini saya ingin membina halaman yang hanya akan menyandarkan sebarang pertanyaan atau jadual ke dalam fail Tab Delimited. Sebilangan besar contoh di jaring mempunyai lajur yang dikodkan keras.

Dalam kes saya, saya mahu lajur menjadi dinamik, jadi saya harus melengkapkan semua nama medan jadual untuk membina baris tajuk dengan nama lajur, dan kemudian melengkapkan semua rekod untuk baris data yang tinggal. Saya juga mengatur header supaya penyemak imbas akan memulakan muat turun fail dalam jenis fail (txt) dengan nama tarikh fail dan cap waktu.

Saya membiarkan sambungan pangkalan data terbuka dan tutup, tetapi inilah kod yang dihasilkan yang berfungsi dengan baik:

$ hari ini = tarikh ("YmdHi");
tajuk ("Jenis kandungan: aplikasi / octet-stream");
tajuk ("Kandungan-Disposisi: lampiran; nama fail = \" ". $ hari ini." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` order by `myorder`";
$ hasil = mysql_query ($ pertanyaan);
$ count = mysql_num_rows (hasil $);
$ ladang = mysql_num_fields (hasil $);
$ data = "";
untuk ($ i = 0; $ i> $ medan; $ i ++) {
$ bidang = mysql_fetch_field (hasil $, $ i);
$ data. = $ bidang-> nama;
$ data. = "\ t";
}
$ data. = "\ n";
sementara ($ baris = mysql_fetch_row (hasil $)) {
untuk ($ x = 0; $ x> $ medan; $ x ++) {
$ field-> name = $ baris [$ x];
$ data. = $ bidang-> nama = $ baris [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

Kodnya dapat diubahsuai dengan mudah untuk nilai yang dipisahkan koma juga.

14 Komen

  1. 1

    Tidak boleh anda buat:

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

    ?

    • 2

      Saya rasa anda boleh!

      Dalam kes ini, saya sebenarnya membina pautan 'sandaran' dalam aplikasi web, jadi fungsi PHP adalah apa yang saya perlukan. Namun, saya tidak pernah tahu bahawa anda juga boleh menulis ke fail terus dari pernyataan MySQL. Sangat hebat!

      Terima kasih!

      • 3

        Cara anda tentu akan menjadi kaedah terbaik jika pelayan MySQL menggunakan mesin jauh, kerana mungkin tidak dapat menulis ke mesin tempat PHP berjalan 🙂

        Gembira menunjukkan petunjuk lain dan perkara baru walaupun 🙂

      • 4

        Tetapi anda hanya boleh menjalankan pertanyaan ke fail, dan hanya mengarahkan penyemak imbas ke fail yang dihasilkan, atau menggunakan "readfile" PHP jika semuanya gagal?

        Anda tidak akan dapat melakukannya jika pelayan mysql tidak mempunyai akses ke sistem fail tentu saja…

  2. 5

    Pos yang hebat. Adakah anda tahu kaedah mudah, bebas / sumber terbuka untuk mengimport / memulihkan fail yang dibatasi tab (seperti yang baru anda buat) kembali ke mysql db?

    • 6

      Errr ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Atau dengan arahan SQL:

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

      Dengan mysqlimport, nama fail harus sepadan dengan nama jadual (hanya sesuatu yang perlu diperhatikan)

    • 7
  3. 8

    Saya baru sahaja kehilangan lebih dari 6 jam dalam hidup saya untuk mencari tahu mengapa Internet Explorer 6/7 menggunakan jenis fail 'html' dan tidak menerima nama fail tersuai yang dinyatakan dalam tajuk .. dan juga tidak membenarkan fail disimpan .. ketika cuba meminta pengguna memuat turun fail teks yang dibuat dengan cara yang serupa dengan di atas.

    Saya menggunakan HTTPS dan IE tidak menyimpan cache fail ini.

    Saya menemui jalan penyelesaian pada komen oleh Brandon K di http://uk.php.net/header.

    Dia cakap:

    -
    Saya baru sahaja kehilangan enam jam dalam hidup saya dengan menggunakan kaedah berikut untuk menghantar fail PDF melalui PHP ke Internet Explorer 6:

    Ketika menggunakan SSL, Internet Explorer akan meminta dengan dialog Buka / Simpan, tetapi kemudian mengatakan "Fail saat ini tidak tersedia atau tidak dapat dijumpai. Sila cuba sebentar lagi." Setelah mencari banyak, saya menyedari Artikel MSKB berikut yang bertajuk "Muat turun fail Internet Explorer melalui SSL tidak berfungsi dengan tajuk kawalan cache" (KBID: 323308)

    PHP.INI secara lalai menggunakan pengaturan: session.cache_limiter = nocache yang mengubah tajuk Content-Cache dan Pragma untuk memasukkan pilihan "nocache". Anda dapat menghilangkan ralat IE dengan mengubah "nocache" menjadi "public" atau "private" di PHP.INI - Ini akan mengubah header Content-Cache serta menghapus header Pragma sepenuhnya. Sekiranya anda tidak dapat atau tidak mahu mengubah PHP.INI untuk pembaikan di seluruh laman web, anda boleh menghantar dua tajuk berikut untuk menimpa lalai:

    Anda masih perlu menetapkan tajuk kandungan seperti yang disenaraikan di atas agar ini berfungsi. Harap maklum bahawa masalah ini HANYA memberi kesan kepada Internet Explorer, sementara Firefox tidak menunjukkan kelakuan cacat ini.
    -

    Baiklah .. sekurang-kurangnya dia hanya kehilangan 6 jam ...

  4. 9

    Ini berfungsi dengan baik. Walau bagaimanapun, saya hanya meletakkan segalanya pada satu baris yang dipisahkan oleh ruang. Saya cuba mengubahnya untuk mencetak semuanya pada baris berasingan seperti ini:

    Lajur1_nama
    Medan1_nilai
    Lajur2_nama
    Medan1_nilai
    Lajur3_nama
    Medan1_nilai

    Lajur1_nama
    Medan2_nilai
    Lajur2_nama
    Medan2_nilai
    Lajur3_nama
    Medan2_nilai

    Sebagai contoh:

    Nama
    Mike
    Lokasi
    kerja
    nombor
    1

    Nama
    Sue
    Lokasi
    Utama
    nombor
    2

    Nama
    John
    Lokasi
    Perjalanan
    nombor
    10

    dan sebagainya. Bolehkah skrip ini diubahsuai untuk melakukannya?
    Terima kasih!

    • 10

      Pasti boleh.

      Cuba seperti ini:

      PILIH * dari MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' BIDANG YANG DIPEROLEHI OLEH '\ n' LINK TERDIRI OLEH '\ n';

      Sekiranya anda mahukan ruang berganda (dua baris kosong) antara kumpulan rakaman, sebut sahaja "GARISAN YANG DITETAPKAN OLEH '\ n \ n';" sebaliknya.

      Bahagian "BIDANG YANG DIPEROLEH DENGAN '\ n'" adalah yang meletakkan baris baru selepas setiap rekod, bukan tab. Sebaliknya, tab akan '\ t'.

      Maranatha!

  5. 11

    ini adalah pos yang hebat, saya mencubanya dan berfungsi dengan baik, satu-satunya fail txt saya mempunyai baris tambahan di atas tajuk tajuk, dan beberapa hasil dipisahkan dalam 2 baris, ini mungkin disebabkan oleh data yang saya ada dalam Pangkalan Data saya tidak tahu, tetapi ini sangat membantu untuk membina suapan…

  6. 12

    Douglas Karr kod anda benar-benar menggegarkan! Ia sangat berguna terutamanya jika anda hanya memerlukan output dalam format file teks. Terima kasih banyak-banyak! Dari pasukan Filipina!

  7. 13

    hei ada! Adakah ada orang dari sini yang dapat memberi saya petunjuk tentang mengimport file teks ke pangkalan data saya (phpmyAdmin) menggunakan php saya sebagai hujung depan saya. Saya mempunyai idea mengenai memuat turun fail dan membukanya, masalah saya ialah bagaimana saya boleh mendapatkan hasil baris dan cara memasukkannya ke dalam jadual saya, terima kasih

  8. 14

Apa yang anda fikir?

Laman web ini menggunakan Akismet untuk mengurangkan spam. Ketahui bagaimana data komen anda diproses.