PHPMyAdminはどうやってSQLをダンプしているのか

投稿者: Anonymous

mysqldumpを使えば一瞬ですが、PHPMyAdminmysqldumpが無くても動くというので、裏側でどういった処理を行っているのでしょうか?PHPだけでどうやってSQLをダンプしているのか、気になります。

お恥ずかしいですが、ソース読んでも膨大すぎてさっぱりだったので、何方かご教示頂けたら幸いです。

ちなみに、「WP Migrate DB」というWordPressのプラグインがあるのですが、こちらも気になりますね。

解決

phpMyAdmin-4.3.7 のソースコードを眺めてみました。
おそらく質問者様の言われている「ダンプ」と「mysqldump」の処理内容である「ダンプ」とは意味が異なるのではないかと思われます。以下は、phpMyAdmin のメニューで 「Dump all rows」 を選んだ場合の処理です(単一のテーブルが対象)。
コメントに書かれてある様に、「Dump all rows」、すなわち、SELECT * FROM ... としている様です。メニューに「Dump all rows」ではなく「Select all rows」と書いてあれば、すぐに分かったのではないかと思いますが。。。

※ もちろん、これとは別に mysqldump コマンドを使用して複数のテーブルの内容をダンプする機能があります(EXPORT with SQL)。

phpMyAdmin-4.3.7-all-languages/libraries/export.lib.php

function PMA_exportTable
           :
// We export just one table
// $allrows comes from the form when "Dump all rows" has been selected
if (! isset($allrows)) {
    $allrows = '';
}
if (! isset($limit_to)) {
    $limit_to = 0;
}
if (! isset($limit_from)) {
    $limit_from = 0;
}
PMA_exportTable(
    $db, $table, $whatStrucOrData, $export_plugin, $crlf, $err_url,
    $export_type, $do_relation, $do_comments, $do_mime, $do_dates,
    $allrows, $limit_to, $limit_from, $sql_query, $aliases
);

phpMyAdmin-4.3.7-all-languages/libraries/export.lib.php

function PMA_exportTable(
          :
    if (! empty($sql_query)) {
          :
    } else {
        $local_query  = 'SELECT * FROM ' . PMA_Util::backquote($db)
            . '.' . PMA_Util::backquote($table) . $add_query;
    }
回答者: user4986

Leave a Reply

Your email address will not be published. Required fields are marked *