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

通常我们都用 phpMyAdmin 来导出,不过如果你的数据库如果存在下列问题,那么 phpMyAdmin 也无能为力。

数据库的字符集与应用程序的字符集不一致;

应用程序用错误的编码将数据保存到了数据库中;

用 phpMyAdmin 和 mysqldump 导出的数据总是乱码。

总之你用 phpMyAdmin 和 mysqldump 导出的数据有乱码时,就试试看这个脚本吧。

使用很简单: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 <<

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;

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值