PHPとMySQL:クエリをタブ区切りファイルにエクスポートする

mysqlphpロゴ

今週末は、クエリやテーブルをタブ区切りファイルにバックアップするだけのページを作成したいと思いました。 ネット上にあるほとんどの例では、列がハードコーディングされています。

私の場合、列を動的にしたかったので、最初にすべてのテーブルフィールド名をループして列名でヘッダー行を作成し、次に残りのデータ行のすべてのレコードをループする必要がありました。 また、ブラウザがファイルの日付とタイムスタンプの名前を使用してファイルタイプ(txt)でファイルのダウンロードを開始するようにヘッダーを設定しました。

データベースのオープン接続とクローズ接続を省略しましたが、結果として得られたコードは非常にうまく機能しました。

$ today = date( "YmdHi");
header( "Content-type:application / octet-stream");
header( "Content-Disposition:attachment; filename = \" "。$ today。" _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` order by` myorder` ";
$ result = mysql_query($ query);
$ count = mysql_num_rows($ result);
$ fields = mysql_num_fields($ result);
$ data = "";
for($ i = 0; $ i> $ fields; $ i ++){
$ field = mysql_fetch_field($ result、$ i);
$ data。= $ field-> name;
$ data。= "\ t";
}
$ data。= "\ n";
while($ row = mysql_fetch_row($ result)){
for($ x = 0; $ x> $ fields; $ x ++){
$ field-> name = $ row [$ x];
$ data。= $ field-> name = $ row [$ x];
$ data。= "\ t";
}
$ data。= "\ n";
}
エコー$データ;

コードは、コンマ区切りの値に対しても簡単に変更できます。

14のコメント

  1. 1

    あなたはただすることはできません:

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

    ?

    • 2

      できると思います!

      この場合、私は実際に Web アプリケーションで「バックアップ」リンクを構築していたので、PHP の機能が必要でした。 ただし、MySQL ステートメントから直接ファイルに書き込むこともできるとは知りませんでした。 とてもかっこいい!

      ありがとうございます!

      • 3

        もちろん、MySQLサーバーがリモートマシン上にある場合は、PHPが実行されているマシンに書き込むことができない可能性があるため、あなたの方法が最善の方法です🙂

        他の方向性や新しいことを指摘してくれてうれしいです🙂

      • 4

        しかし、クエリをファイルに対して実行し、ブラウザを生成されたファイルにリダイレクトするか、他のすべてが失敗した場合はPHPの「readfile」を使用することができますか?

        もちろん、mysqlサーバーがファイルシステムにアクセスできない場合、それを行うことはできません…

  2. 5

    素晴らしい投稿。 タブ区切りファイル(作成したばかりのファイル)をmysqlデータベースにインポート/復元する簡単なフリー/オープンソースの方法を知っていますか?

    • 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 Explorer6 / 6がファイルタイプ 'html'を適用し、ヘッダーで指定されたカスタムファイル名を受け入れず、ファイルの保存を許可しない理由を解明しようとして、7時間以上の人生を失いました。上記と同様の方法で作成されたテキストファイルをユーザーにダウンロードさせようとします。

    HTTPSを使用していましたが、IEはこれらのファイルをキャッシュしません。

    BrandonKのコメントで解決策を見つけました。 http://uk.php.net/header.

    彼は言い​​ます:

    —–
    次の方法を使用してPDFファイルをPHP経由でInternetExplorer 6に送信しようとして、XNUMX時間の人生を失いました。

    SSL を使用している場合、Internet Explorer は [開く/保存] ダイアログでプロンプトを表示しますが、「ファイルは現在使用できないか、見つかりません。 後でもう一度やり直してください。」 多くの検索の後、「SSL 経由の Internet Explorer ファイルのダウンロードがキャッシュ コントロール ヘッダーで機能しない」というタイトルの次の MSKB 記事に気付きました (KBID: 323308)

    デフォルトでは、PHP.INI は次の設定を使用します。 session.cache_limiter = nocache は、Content-Cache および Pragma ヘッダーを変更して「nocache」オプションを組み込みます。 PHP.INI で「nocache」を「public」または「private」に変更することで、IE エラーを解消できます。これにより、Content-Cache ヘッダーが変更され、Pragma ヘッダーが完全に削除されます。 サイト全体の修正のために PHP.INI を変更できない、または変更したくない場合は、次の XNUMX つのヘッダーを送信してデフォルトを上書きできます。

    これを機能させるには、引き続きコンテンツ ヘッダーを上記のように設定する必要があります。 この問題は Internet Explorer にのみ影響することに注意してください。Firefox はこの欠陥のある動作を示しません。
    -

    ええと..少なくとも彼は6時間しか失いませんでした…

  4. 9

    これはうまくいきます。 ただし、スペースで区切られた XNUMX 行ですべてを取得します。 次のようにすべてを別の行に出力するように変更しようとしています。

    Column1_name
    Field1_value
    Column2_name
    Field1_value
    Column3_name
    Field1_value

    Column1_name
    Field2_value
    Column2_name
    Field2_value
    Column3_name
    Field2_value

    例:


    マイク
    ロケーション
    仕事

    1


    スー
    ロケーション
    ホーム

    2


    ジョン
    ロケーション
    旅行

    10

    等々。 このスクリプトを変更して実行することはできますか?
    ありがとうございます!

    • 10

      確かにできます。

      次のようなものを試してください。

      SELECT * from MyTableName INTO OUTFILE'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt 'FIELDS TERMINATED BY' \ n'LINES TERMINATED BY '\ n';

      レコードグループ間にXNUMXつのスペース(XNUMXつの空の行)が必要な場合は、「LINES TERMINATED BY '\ n \ n';」とだけ言ってください。 代わりに。

      「FIELDS TERMINATED BY '\n'」の部分は、各レコードの後に​​タブの代わりに改行を挿入するものです。 タブは代わりに '\t' になります。

      マラナサ!

  5. 11

    これは間違いなく素晴らしい投稿です。試してみてうまくいきました。唯一のことは、txtファイルのヘッダータイトルの上に余分な行があり、一部の結果が2行に分かれていることです。これは、私が持っているデータが原因である可能性があります。私のデータベースではわかりませんが、これはフィードを作成するのに非常に役立ちます…

  6. 12

    Douglas Karr あなたのコードは本当に素晴らしいです! テキストファイル形式の出力が必要な場合に特に便利です。 どうもありがとう! チームフィリピンから!

  7. 13

    ちょっと、そこ! 私のphpをフロントエンドとして使用してテキストファイルをデータベース(phpmyAdmin)にインポートするためのヒントを私に与えることができるものはここからありますか? ファイルをダウンロードして開くことについての考えがあります。私の問題は、行の結果を取得する方法と、それをテーブルに挿入する方法です。

  8. 14

    ヘッダータイトルの上にあるhttpヘッダー行を削除する方法を誰かに教えてもらえますか

どう思いますか?

このサイトはAkismetを使用して迷惑メールを減らします。 コメントの処理方法を学ぶ.