All articles(网络文学目录) All Pictures(图片目录) All Softwares(软件目录)

 
PHP技巧:用PHP导出MySQL数据库内容为.sql文件_[PHP教程]

Writer: 归海一刀 Article type: Programming skills(编程技巧) Time: 2014/2/17 7:36:35 Browse times: 315 Comment times: 0

PHP技巧:用PHP导出MySQL数据库内容为.sql文件_[PHP教程]


Head photo

Go homepage
Upload pictures
Write articles

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 语句。
所以数据结构需要单独导出,不过这个就不存在字符集问题了。







源代码:

















  1. if (!function_exists('mysql_connect')) {


  2. if (DIRECTORY_SEPARATOR == '/') {


  3. dl('php_mysql.so');


  4. } else {


  5. dl('php_mysql.dll');


  6. }


  7. }





  8. database = null;


  9. if (isset(argv[1])) {


  10. database = argv[1];


  11. } else {


  12. display_help();


  13. exit;


  14. }





  15. optional_args = array(


  16. '-h' => 'hostname',


  17. '-c' => 'charset',


  18. '-f' => 'filename',


  19. '-u' => 'username'


  20. );





  21. options = array(


  22. 'hostname' => 'localhost',


  23. 'charset' => 'utf8',


  24. 'filename' => '%s.sql',


  25. 'username' => 'root',


  26. );





  27. input_password = false;


  28. for (i = 2; i < argc; i++) {


  29. arg = argv[i];


  30. if (arg == '-p') {


  31. input_password = true;


  32. continue;


  33. }


  34. if (isset(optional_args[arg])) {


  35. value_name = optional_args[arg];


  36. if (isset(argv[i + 1])) {


  37. options[value_name] = argv[i + 1];


  38. i++;


  39. }


  40. }


  41. }





  42. if (input_password) {


  43. echo "password: ";


  44. fscanf(STDIN, '%s', password);


  45. options['password'] = password;


  46. echo "\n";


  47. } else {


  48. options['password'] = '';


  49. }





  50. if (database == null) {


  51. display_help();


  52. exit;


  53. }





  54. mysql_connect(options['hostname'], options['username'], options['password']);


  55. mysql_select_db(database);


  56. mysql_query("SET NAMES '{options['charset']}'");





  57. // 设置要导出的表


  58. tables = list_tables(database);





  59. filename = sprintf(options['filename'], database);


  60. fp = fopen(filename, 'w');


  61. foreach (tables as table) {


  62. dump_table(table, fp);


  63. }


  64. fclose(fp);


  65. mysql_close();


  66. echo "done.\n";


  67. exit;











  68. function list_tables(database)


  69. {


  70. rs = mysql_list_tables(database);


  71. tables = array();


  72. while (row = mysql_fetch_row(rs)) {


  73. tables[] = row[0];


  74. }


  75. mysql_free_result(rs);


  76. return tables;


  77. }





  78. function dump_table(table, fp = null)


  79. {


  80. need_close = false;


  81. if (is_null(fp)) {


  82. fp = fopen(table . '.sql', 'w');


  83. need_close = true;


  84. }


  85. fwrite(fp, "-- \n-- {table}\n-- \n");


  86. rs = mysql_query("SELECT * FROM `{table}`");


  87. while (row = mysql_fetch_row(rs)) {


  88. fwrite(fp, get_insert_sql(table, row));


  89. }


  90. mysql_free_result(rs);


  91. if (need_close) {


  92. fclose(fp);


  93. }


  94. fwrite(fp, "\n\n");


  95. }





  96. function get_insert_sql(table, row)


  97. {


  98. sql = "INSERT INTO `{table}` VALUES (";


  99. values = array();


  100. foreach (row as value) {


  101. values[] = "'" . mysql_real_escape_string(value) . "'";


  102. }


  103. sql .= implode(', ', values) . ");\n";


  104. return sql;


  105. }





  106. function display_help()


  107. {


  108. echo <<


  109. syntax:


  110. php export_db.php database [-h hostname] [-c charset] [-f filename] [-u username] [-p]





  111. defualt hostname : localhost


  112. default charset : utf8


  113. default username : root


  114. default password : (none)


  115. default filename : [database].sql





  116. EOT;


  117. }





  118. ?>





下载:export_db.rar

来源:网络






































There are 0 records,
Comment:
Must be registered users to comment(必须是注册用户才能发表评论)

Disclaimer Privacy Policy About us Site Map
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.