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

字体大小: 中小 标准 ->行高大小: 标准

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

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

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

使用很简单:

phpexport_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 ($tablesas$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 ($rowas$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. ?>

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/744.html