利用PDO导入导出数据库

 

  
  
  
  
  1. <?php 
  2. header("Content-Type:text/html;charset=utf-8"); 
  3. /* 
  4. * 数据库导出调用 
  5. */ 
  6. $host = '';//主机名 
  7. $dbname = '';//数据库名 
  8. $user = '';//用户名 
  9. $password = '';//密码 
  10. $flag = 1;//1为导出数据苦结构和数据 0为仅导出数据库结构 
  11. //outputSql($host, $dbname, $user, $password, $flag); 
  12. /* 
  13. * 数据库导入调用 
  14. */ 
  15. //$filename="";//sql文件 
  16. //inputSql($host, $dbname, $user, $password, $filename); 
  17. /* 
  18. * 数据库导出函数outputSql 
  19. * 用PDO方式导出数据库数据 
  20. * $host 主机名 如localhost 
  21. * $dbname 数据库名 
  22. * $user 用户名 
  23. * $password 密码 
  24. * $flag 标志位0或1 0为仅导出数据库结构 1为导出数据库结构和数据 默认为1 
  25. */ 
  26. function outputSql($host$dbname$user$password$flag=1) { 
  27.     try { 
  28.         $pdo = new PDO("mysql:host=$host;dbname=$dbname"$user$password);//连接数据库 
  29.         $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//设置调优参数,遇到错误抛出异常 
  30.     } catch (PDOException $e) { 
  31.         echo $e->getMessage();//如果连接异常则抛出错误信息 
  32.         exit
  33.     } 
  34.     $mysql = '';//准备字符串装载导出来的sql语句 
  35.     $statments = $pdo->query("show tables");//返回结果集,show tables检视所有表名 
  36.     foreach ($statments as $value) {//遍历此结果集,导出每个表名对应的信息 
  37.         $table_name = $value[0];//获取该表名 
  38.         $mysql.="DROP TABLE IF EXISTS `$table_name`;\n";//每个表前都准备Drop语句 
  39.         $table_query = $pdo->query("show create table `$table_name`");//取出该表建表信息的结果集 
  40.         $create_sql = $table_query->fetch();//利用fetch方法取出该结果集对应的数组 
  41.         $mysql.=$create_sql['Create Table'] . ";\r\n\r\n";//写入建表信息 
  42.         if ($flag != 0) {//如果标志位不是0则继续取出该表内容生成insert语句 
  43.             $iteams_query = $pdo->query("select * from `$table_name`");//取出该表所有字段结果集 
  44.             $values = "";//准备空字符串装载insert value值 
  45.             $items = "";//准备空字符串装载该表字段名 
  46.             while ($item_query = $iteams_query->fetch(PDO::FETCH_ASSOC)) { //用关联查询方式返回表中字段名和值的数组 
  47.                 $item_names = array_keys($item_query);//取出该数组键值 即字段名 
  48.                 $item_names = array_map("addslashes"$item_names);//将特殊字符转译加\ 
  49.                 $items = join('`,`'$item_names); //联合字段名 如:items1`,`item2 `符号为反引号 键盘1旁边 字段名用反引号括起 
  50.                 $item_values = array_values($item_query);//取出该数组值 即字段对应的值 
  51.                 $item_values = array_map("addslashes"$item_values);//将特殊字符转译加\ 
  52.                 $value_string = join("','"$item_values);//联合值 如:value1','value2 值用单引号括起 
  53.                 $value_string = "('" . $value_string . "'),";//值两边加括号 
  54.                 $values.="\n" . $value_string;//最后返回给$value 
  55.             } 
  56.             if ($values != "") {//如果$values不为空,即该表有内容 
  57.                 //写入insert语句 
  58.                 $insert_sql = "INSERT INTO `$table_name` (`$items`) VALUES" . rtrim($values",") . ";\n\r"
  59.                 //将该语句写入$mysql 
  60.                 $mysql.=$insert_sql
  61.             } 
  62.         } 
  63.         //表间的分割线 
  64.         //$mysql.="-- ---------------------------------------------------\n\r"; 
  65.     } 
  66.     $filename = $dbname . "_" . date('Ymd') . ".sql"//导出的文件名 
  67.     file_put_contents($filename$mysql);//导出sql文件 
  68.     echo "数据备份成功,生成备份文件" . $filename
  69. /* 
  70. * 数据库导入函数inputSql 
  71. * 用PDO方式导入数据库数据 
  72. * $host 主机名 如localhost 
  73. * $dbname 数据库名 
  74. * $user 用户名 
  75. * $password 密码 
  76. * $filename为导入的文件名 
  77. * 
  78. * 注:用PDO->exec方法一次性导入整个sql文件是可以导入数据库的,但如果某条语句中有错误是无法抛出异常的 
  79. * 所以这里对整个sql文件进行了一次切割,以;作为切割位,切割成单条sql语句(sql文件中注释等部分不影响PDO->exec的执行),逐条调用PDO->exec方法导入,可以方便查错 
  80. */ 
  81. function inputSql($host$dbname$user$password$filename) { 
  82.     try { 
  83.         $pdo = new PDO("mysql:host=$host;dbname=$dbname"$user$password);//连接数据库 
  84.         $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//允许抛出异常 
  85.     } catch (PDOException $e) { 
  86.         echo $e->getMessage();//数据库连接不成功抛出异常 
  87.         exit
  88.     } 
  89.     try { 
  90.         if (file_exists($filename)) {//如果文件存在 
  91.             $sql_stream = file_get_contents($filename);//读取整个文件内容 
  92.             $sql_stream = rtrim($sql_stream);//去掉末尾空格 
  93.             //利用正则替换函数,将导入的内容部分,即insert value里的;换成特殊符号' $$$ '为进一步按;切割单条sql语句做准备 
  94.             $new_stream = preg_replace_callback("/\((.*)\)/", create_function('$matches''return str_replace(";"," $$$ ",$matches[0]);'), $sql_stream); 
  95.             //切割单条sql语句生成数组 
  96.             $sql_array = explode(";"$new_stream); 
  97.              //遍历该数组 
  98.             foreach ($sql_array as $value) { 
  99.                 if (!emptyempty($value)){ //数组最后一个是空数组,所以需要判断一下 
  100.                     $sql = str_replace(" $$$ "";"$value) . ";"//将该条sql语句中' $$$ '转换回; 
  101.                 $pdo->exec($sql); //执行该语句 
  102.                 echo "成功插入数据:<br/><per>".$sql.";<per/><br/><br/>"
  103.                 } 
  104.                  
  105.             } 
  106.             echo "导入数据库成功"
  107.         } 
  108.     } catch (PDOException $e) { 
  109.         echo $e->getMessage(); //执行异常则抛出异常 
  110.         exit
  111.     } 
  112. ?> 

 

你可能感兴趣的:(数据库,职场,pdo,休闲)