• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

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

使用很简单:

php export_db.php 数据库名 [-h 主机名] [-c 字符集] [-f 输出文件名] [-u 用户名] [-p]

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

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


源代码:

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

下载:export_db.rar




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php正则表达式发布时间:2022-07-10
下一篇:
[译]Speeding up your PHP scripts发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap