文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>用 PHP 导出 MySQL 数据库内容为 .sql 文件

用 PHP 导出 MySQL 数据库内容为 .sql 文件

时间:2008-04-12  来源:qeeify


通常我们都用 phpMyAdmin 来导出,不过如果你的数据库的编码设置和存储数据的实际编码不一致,那么 phpMyAdmin 也无能为力了。这里提供了一个简单的脚本,可以帮助你从 mysql 中导出数据。总之你用 phpMyAdmin 和 mysqldump 导出的数据有乱码时,就试试看这个脚本吧。
本文原始网址:
http://www.dualface.com/blog/?p=354

使用很简单:
php export_db.php 数据库名 [-h 主机名] [-c 字符集] [-f 输出文件名] [-u 用户名] [-p]
数据库名是必须提供的,其他参数如果没有提供则使用下面的默认值:
    默认主机名 : localhost
    默认字符集 : utf8
    默认用户名 : root
    默认密码 : (无)
    默认输出文件 : 数据库名.sql

这个脚本的导出结果就是一个 .sql 文件,只有 insert 语句。
所以数据结构需要单独导出,不过这个就不存在字符集问题了。
源代码:
?php
if (!function_exists('mysql_connect')) {
    if (DIRECTORY_SEPARATOR == '/') {
        dl('php_mysql.so');
    } else {
        dl('php_mysql.dll');
    }
}
$database = null;
if (isset($argv[1])) {
    $database = $argv[1];
} else {
    display_help();
    exit;
}
$optional_args = array(
    '-h' => 'hostname',
    '-c' => 'charset',
    '-f' => 'filename',
    '-u' => 'username'
);
$options = array(
    'hostname' => 'localhost',
    'charset' => 'utf8',
    'filename' => '%s.sql',
    'username' => 'root',
);
$input_password = false;
for ($i = 2; $i  $argc; $i++) {
    $arg = $argv[$i];
    if ($arg == '-p') {
        $input_password = true;
        continue;
    }
    if (isset($optional_args[$arg])) {
        $value_name = $optional_args[$arg];
        if (isset($argv[$i + 1])) {
            $options[$value_name] = $argv[$i + 1];
            $i++;
        }
    }
}
if ($input_password) {
    echo "password: ";
    fscanf(STDIN, '%s', $password);
    $options['password'] = $password;
    echo "\n";
} else {
    $options['password'] = '';
}
if ($database == null) {
    display_help();
    exit;
}
mysql_connect($options['hostname'], $options['username'], $options['password']);
mysql_select_db($database);
mysql_query("SET NAMES '{$options['charset']}'");
// 设置要导出的表
$tables = list_tables($database);
$filename = sprintf($options['filename'], $database);
$fp = fopen($filename, 'w');
foreach ($tables as $table) {
    dump_table($table, $fp);
}
fclose($fp);
mysql_close();
echo "done.\n";
exit;
function list_tables($database)
{
    $rs = mysql_list_tables($database);
    $tables = array();
    while ($row = mysql_fetch_row($rs)) {
        $tables[] = $row[0];
    }
    mysql_free_result($rs);
    return $tables;
}
function dump_table($table, $fp = null)
{
    $need_close = false;
    if (is_null($fp)) {
        $fp = fopen($table . '.sql', 'w');
        $need_close = true;
    }
    fwrite($fp, "-- \n-- {$table}\n-- \n");
    $rs = mysql_query("SELECT * FROM `{$table}`");
    while ($row = mysql_fetch_row($rs)) {
        fwrite($fp, get_insert_sql($table, $row));
    }
    mysql_free_result($rs);
    if ($need_close) {
        fclose($fp);
    }
    fwrite($fp, "\n\n");
}
function get_insert_sql($table, $row)
{
    $sql = "INSERT INTO `{$table}` VALUES (";
    $values = array();
    foreach ($row as $value) {
        $values[] = "'" . mysql_real_escape_string($value) . "'";
    }
    $sql .= implode(', ', $values) . ");\n";
    return $sql;
}
function display_help()
{
    echo EOT
syntax:
    php export_db.php database [-h hostname] [-c charset] [-f filename] [-u username] [-p]
    defualt hostname : localhost
    default charset : utf8
    default username : root
    default password : (none)
    default filename : [database].sql
EOT;
}
?>

下载export_db:
http://www.dualface.com/blog/downloads/export_db.rar
原文地址:
http://qeeify.com/index.php/2008/03/22/code-export-mysql-data.html
更多信息,请访问 FleaPHP/QeePHP 开源开发框架官方网站:
http://www.fleaphp.org/




相关阅读 更多 +
排行榜 更多 +
粉末星战 v1.0.0 安卓版

粉末星战 v1.0.0 安卓版

休闲益智 下载
粉末星战 v1.0.0 安卓版

粉末星战 v1.0.0 安卓版

休闲益智 下载
火线反恐部队 v1.2 安卓版

火线反恐部队 v1.2 安卓版

飞行射击 下载