4

phpMyAdmin の [エクスポート] タブと同じことを行う PHP 関数を作成したい場合、どうすればよいでしょうか? これを行うMySQL関数があるかどうか、またはphpMyAdminがエクスポートファイルを(SQLで)手動で構築するだけかどうかはわかりません。シェル アクセスなし。PHPを使用するだけです。

mysqldumpのドキュメントを試してみましたが、シェルを使用する必要があるようです。それが何であるかはよくわかりません-おそらく私の質問は、シェルをどのように使用しますか?

私のばかげたアイデアは、非技術者が MySQL を使用して 1 つのサーバー (ローカルホストなど) にサイトを構築し、サイト、データベース、およびすべてを別のサーバー (リモートサーバーなど) にエクスポートできるようにすることです。

インポートプロセスについてはかなり明確だと思います。

4

1 に答える 1

5

phpMyAdmin のソース コードを確認できます (オープン ソース ソフトウェアの利点)。libraries/export/sql.php スクリプト ファイル内の export.php スクリプトとサポート関数を確認します。

要約すると、phpMyAdmin の機能は次のとおりです。

  • 指定されたデータベース内のテーブルのリストを取得します (SHOW TABLES FROM...),
  • 各テーブルの作成クエリを取得 (SHOW CREATE TABLE...)、
  • それを解析し、そこから列定義を抽出します。
  • すべてのデータを取得する (SELECT * FROM...)
  • 列データに従ってクエリを作成します。

私は自分のアプリ用に同様のコードを作成しました (phpMyAdmin の GPL ライセンスで使用が許可されていない場合のバックアップ目的で) が、DESCRIBE を使用して列の定義を取得します。DESCRIBE 出力よりも多くの情報が含まれているため、SHOW CREATE TABLE 出力を解析すると思います。

この方法で SQL 文を生成するには、エスケープを処理するために少し注意が必要ですが、型の変換、データのフィルタリングまたはサニタイズなどを行うことができるため、ある程度の柔軟性が得られます。また、mysqldump などのツールを使用するよりもはるかに遅くなります。使用可能なメモリをすべて消費しないように注意してください (すぐに書き込み、頻繁に書き込み、すべてをメモリに保持しないでください)。

(サーバーからサーバーへの) 移行プロセスを実装する場合は、PHP ですべてを行う場合を除き、シェル スクリプトを使用して mysqldump を直接呼び出す方が簡単かもしれません。

于 2012-07-09T06:28:02.347 に答える