PHP技巧:用PHP导出MySQL数据库内容为.sql文件_[PHP教程]
					通常我们都用 phpMyAdmin 来导出,不过如果你的数据库如果存在下列问题,那么 phpMyAdmin 也无能为力。
- 数据库的字符集与应用程序的字符集不一致; 
 - 应用程序用错误的编码将数据保存到了数据库中; 
 - 用 phpMyAdmin 和 mysqldump 导出的数据总是乱码。 
 
总之你用 phpMyAdmin 和 mysqldump 导出的数据有乱码时,就试试看这个脚本吧。
使用很简单:
php export_db.php 数据库名 [-h 主机名] [-c 字符集] [-f 输出文件名] [-u 用户名] [-p] 
数据库名是必须提供的,其他参数如果没有提供则使用下面的默认值: 
默认主机名 : localhost 
默认字符集 : utf8 
默认用户名 : root 
默认密码 : (无) 
默认输出文件 : 数据库名.sql 
这个脚本的导出结果就是一个 .sql 文件,只有 insert 语句。
所以数据结构需要单独导出,不过这个就不存在字符集问题了。
源代码:
- 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; 
 - } 
 
- ?>
  
下载:export_db.rar
来源:网络