目录 一、获取数据库所有的数据表 方法一:TP5 方法二:原生PHP 二、导出指定数据表的数据结构 三、 导出SQL文件 四、生成SQL语句 五、完整代码 前端 后端 语言:PHP 数据库:Mysql 功能:分为四部分,① 查出数据库的
目录
语言:PHP
功能:分为四部分,① 查出数据库的所有表;② 导出指定数据表的结构;③ 以sql文件的形式导出指定数据表的数据,并且支持带条件导出,导出的数据可以直接导入数据库;④ 生成SQL语句。
整体效果:
使用TP5的DB类中的getTables方法
public function index(){//获取数据库所有的数据表$tabList = Db::getTables();$this->assign(['tabList'=>$tabList]);return $this->fetch();}
也可以使用原生PHP代码
// 数据库信息$cfg_dbhost = 'localhost';$cfg_dbname = 'xxx';$cfg_dbuser = 'XXX';$cfg_dbpwd = 'xxx';$cfg_db_language = 'utf8';$to_file_name = "xxx.sql"; //导出文件名//链接数据库$link = mysqli_connect($cfg_dbhost,$cfg_dbuser,$cfg_dbpwd,$cfg_dbname);//查询数据库中所有表名,并保存在数组中$tables = mysqli_query($link,"SHOW TABLES");
逻辑说明:输入要导出的数据表,指定导出的文件名,获取数据结构,写入导出文件
// 导出数据结构public function downStru(){// 接收条件$table = input('table');$to_file_name = ROOT_PATH . "public". DS ."sql". DS . "table_".$table.".sql" ; // 导出文件名// 导出数据表结构$sql = "show create table ".$table;$res = Db::query($sql);$info = "-- ----------------------------\r\n"; $info .= "-- Table structure for `".$table."`\r\n"; $info .= "-- ----------------------------\r\n"; $info .= "DROP TABLE IF EXISTS `".$table."`;\r\n"; $sqlStr = $info.$res[0]['Create Table'].";\r\n\r\n"; // 写入到文件 file_put_contents($to_file_name,$sqlStr);}
导出后结果如下图,可以直接导入数据库使用
说明:以SQL文件的形式导出指定数据表的数据,并且支持带条件导出,导出的数据可以直接导入数据库。
① 先输入到导出的数据表和条件(条件可为空),指定导出文件名称;
② 获取数据表的结构并写入文件
③ 根据输入的条件组装SQL语句,并查询
④ 接收到查询结果后,循环结果集并拼接插入数据格式(如果有特殊格式请过滤掉,否则在导入数据库时会出错)
⑤ 写入导出文件
需要注意的是输入条件部分,字段名可以正常写,表达式支持=;>;<;>=;<=;<>;like;[not] between;[not] in;[not] null几种,当然也可以支持其他表达式,这里只列出了已经测试可以使用的表达式,查询条件需要特别注意,不同的表达式对应的查询条件也不相同,比如说like对应的是"%超声%",between对应的是1 AND 8,其实就是原生SQL的写法,通过自定义的方法进行拼接。
代码如下
public function downSql(){// ① 接收条件$table = input('table');$field = input('field');$expre = input('expre');$condition = input('condition');$to_file_name = ROOT_PATH . "public". DS ."sql". DS . "table_".$table.".sql" ; // 导出文件名$sql = "show create table ".$table;$res = Db::query($sql);$info = "-- ----------------------------\r\n"; $info .= "-- Table structure for `".$table."`\r\n"; $info .= "-- ----------------------------\r\n"; $info .= "DROP TABLE IF EXISTS `".$table."`;\r\n"; $sqlStr = $info.$res[0]['Create Table'].";\r\n\r\n";file_put_contents($to_file_name,$sqlStr);// ③ 根据输入条件组装查询条件if (!empty($field) && !empty($expre) && !empty($condition)) {$where = "where"." ". $field . " " .$expre . " " .$condition;// 查询语句$sql = "select * from ".$table ." ".$where;}else{// 查询语句$sql = "select * from ".$table ;}$res = Db::query($sql);// 判断数据是否为空if(count($res) >= 1){$info = "-- ----------------------------\r\n";$info .= "-- Records for `".$table."`\r\n";$info .= "-- ----------------------------\r\n";file_put_contents($to_file_name,$info,FILE_APPEND); foreach($res as $v){ $sqlStr = "INSERT INTO `".$table."` VALUES ("; // 循环出字段对应的数据,并组装 foreach($v as $zd){ // 替换数据中的换行符 $zd = str_replace("\r\n","",$zd); $sqlStr .= "'".$zd."', "; } //去掉最后一个逗号和空格 $sqlStr = substr($sqlStr,0,strlen($sqlStr)-2); $sqlStr .= ");\r\n"; // ⑤ 写入文件 file_put_contents($to_file_name,$sqlStr,FILE_APPEND); } file_put_contents($to_file_name,"\r\n",FILE_APPEND);}}
导出结果如下,可以使用此文件直接导入到其他数据库
说明:接收输入的数据表和条件,构造SQL查询语句,把构造的语句返回
public function creatSql(){// 接收条件$table = input('table');$field = input('field');$expre = input('expre');$condition = input('condition');// 根据输入条件组装查询条件if (!empty($field) && !empty($expre) && !empty($condition)) {$where = "where"." ". $field . " " .$expre . " " .$condition;// 查询语句$sql = "select * from ".$table ." ".$where;}else{// 查询语句$sql = "select * from ".$table ;}return $sql;}
效果如下
来源地址:https://blog.csdn.net/qq_25285531/article/details/130989854
--结束END--
本文标题: 利用PHP导出MySQL数据表结构和SQL文件
本文链接: https://www.lsjlt.com/news/399072.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0