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

时间:2010-01-06 10:37:29   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:;用 phpMyAdmin 和 mysqldump 导出的数据总是乱码。总之你用 phpMyAdmin 和 mysqldump 导出的数据有乱码时,就试试看这个脚本吧。使用很简单:phpexport_db.php数据库名[-h 主机名] [-c 字符集] [-f 输出文件名] [-u 用户名] [-p]  数据库名是必须提供的,其他参数...
  正文:

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

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

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

使用很简单:

phpexport_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 ($tablesas$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}`");
    来源:http://www.002pc.com/master/College/Programming/PHP/11538.html

收藏到:

关于《用PHP导出MySQL 数据库内容为.sql 文件》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td