博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

剑心通明的资料库

文章均为转载,本人不负因参考它所导致的一切后果,请谨慎参考!如您的文章不愿被转载,请点击此处联系本人!
  jxtm.cublog.cn

关于作者
姓名:剑心通明
职业:高级工程师(专修灵魂^_^)
年龄:20出头30不到
位置:网络上一节点
个性介绍:努力学习每一天!
倾心打造:http://www.bsdlover.cn
http://bbs.bsdlover.cn
BSD爱好者的乐园!
|| << >> ||
我的分类


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

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

  • 数据库的字符集与应用程序的字符集不一致;
  • 应用程序用错误的编码将数据保存到了数据库中;
  • 用 phpMyAdmin 和 mysqldump 导出的数据总是乱码。

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

使用很简单:

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

这个脚本的导出结果就是一个 .sql 文件,只有 insert 语句。
所以数据结构需要单独导出,不过这个就不存在字符集问题了。

代码

  1. <?php
  2. if (!function_exists('mysql_connect')) {
  3.     if (DIRECTORY_SEPARATOR == '/') {
  4.         dl('php_mysql.so');
  5.     } else {
  6.         dl('php_mysql.dll');
  7.     }
  8. }
  9. $database = null;
  10. if (isset($argv[1])) {
  11.     $database = $argv[1];
  12. } else {
  13.     display_help();
  14.     exit;
  15. }
  16. $optional_args = array(
  17.     '-h' => 'hostname',
  18.     '-c' => 'charset',
  19.     '-f' => 'filename',
  20.     '-u' => 'username'
  21. );
  22. $options = array(
  23.     'hostname' => 'localhost',
  24.     'charset' => 'utf8',
  25.     'filename' => '%s.sql',
  26.     'username' => 'root',
  27. );
  28. $input_password = false;
  29. for ($i = 2; $i < $argc; $i++) {
  30.     $arg = $argv[$i];
  31.     if ($arg == '-p') {
  32.         $input_password = true;
  33.         continue;
  34.     }
  35.     if (isset($optional_args[$arg])) {
  36.         $value_name = $optional_args[$arg];
  37.         if (isset($argv[$i + 1])) {
  38.             $options[$value_name] = $argv[$i + 1];
  39.             $i++;
  40.         }
  41.     }
  42. }
  43. if ($input_password) {
  44.     echo "password: ";
  45.     fscanf(STDIN, '%s', $password);
  46.     $options['password'] = $password;
  47.     echo "\n";
  48. } else {
  49.     $options['password'] = '';
  50. }
  51. if ($database == null) {
  52.     display_help();
  53.     exit;
  54. }
  55. mysql_connect($options['hostname'], $options['username'], $options['password']);
  56. mysql_select_db($database);
  57. mysql_query("SET NAMES '{$options['charset']}'");
  58. // 设置要导出的表
  59. $tables = list_tables($database);
  60. $filename = sprintf($options['filename'], $database);
  61. $fp = fopen($filename, 'w');
  62. foreach ($tables as $table) {
  63.     dump_table($table, $fp);
  64. }
  65. fclose($fp);
  66. mysql_close();
  67. echo "done.\n";
  68. exit;
  69. function list_tables($database)
  70. {
  71.     $rs = mysql_list_tables($database);
  72.     $tables = array();
  73.     while ($row = mysql_fetch_row($rs)) {
  74.         $tables[] = $row[0];
  75.     }
  76.     mysql_free_result($rs);
  77.     return $tables;
  78. }
  79. function dump_table($table, $fp = null)
  80. {
  81.     $need_close = false;
  82.     if (is_null($fp)) {
  83.         $fp = fopen($table . '.sql', 'w');
  84.         $need_close = true;
  85.     }
  86.     fwrite($fp, "-- \n-- {$table}\n-- \n");
  87.     $rs = mysql_query("SELECT * FROM `{$table}`");
  88.     while ($row = mysql_fetch_row($rs)) {
  89.         fwrite($fp, get_insert_sql($table, $row));
  90.     }
  91.     mysql_free_result($rs);
  92.     if ($need_close) {
  93.         fclose($fp);
  94.     }
  95.     fwrite($fp, "\n\n");
  96. }
  97. function get_insert_sql($table, $row)
  98. {
  99.     $sql = "INSERT INTO `{$table}` VALUES (";
  100.     $values = array();
  101.     foreach ($row as $value) {
  102.         $values[] = "'" . mysql_real_escape_string($value) . "'";
  103.     }
  104.     $sql .= implode(', ', $values) . ");\n";
  105.     return $sql;
  106. }
  107. function display_help()
  108. {
  109.     echo <<<EOT
  110. syntax:
  111.     php export_db.php database [-h hostname] [-c charset] [-f filename] [-u username] [-p]
  112.     defualt hostname : localhost
  113.     default charset  : utf8
  114.     default username : root
  115.     default password : (none)
  116.     default filename : [database].sql
  117. EOT;
  118. }
  119. ?>

下载:export_db.rar

发表于: 2008-05-17,修改于: 2008-05-17 10:55,已浏览66次,有评论0条 推荐 投诉


网友评论
 发表评论