php导出Mysql数据含建表SQL和数据支持不加引号字段识别

<?php
// MySQL连接信息
$pubs = array();
$pubs["dbhost"] = "localhost";		//数据库地址本地localhost
$pubs["dbuser"] = "kehu_chalide_com";	//数据库账号
$pubs["dbpass"] = "6t4RdBJN2sas";	//数据库密码
$pubs["dbname"] = "kehu_chalide_com";	//数据库名称
$pubs["dbport"] = "3306";		//数据库端口号
$pubs["dbcode"] = "UTF8";		//数据库编码 UTF8 GB2312
$pubs["dbfile"] = "Data.bak.".date("YmdH").".sql";

foreach ($pubs as $ti=>$val) $$ti = $val; //调用

//不加引号字段属性列表
$typex = "VARBINARY|TIMESTAMP|MEDIUMINT|SMALLINT|DATETIME|TINYINT|BOOLEAN|DECIMAL|BIGINT|BINARY|DOUBLE|SERIAL|typex|FLOAT|BOOL|REAL|DATE|INT|BIT";

// 连接MySQL数据库
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname, $dbport);
if (!$conn){ die("连接失败(请检查数据库配置信息): " . mysqli_connect_error()); }

// 获取所有表名
$tables = array();
$result = mysqli_query($conn, 'SHOW TABLES');
while ($row = mysqli_fetch_row($result)) { $tables[] = $row[0];}

// 导出表结构
$info = '';
$info .= "-- ----------------------------\r\n";
$info .= "-- 备份时间".date("Y-m-d H:i:s")."\r\n";
$info .= "-- 仅用于测试和学习,本程序不适合处理超大量数据\r\n";
$info .= "-- ----------------------------\r\n\r\n";
foreach ($tables as $table) {

//得到不加引号的列
$sqlc = "DESCRIBE `{$table}`";
$resu = mysqli_query($conn, $sqlc);
if (!$resu){ echo "<p>Err Table Info;</p>";}
$ii=0; $ili = "|";
while($err = $resu->fetch_assoc()){
foreach ($err as $ti=>$val) $$ti = $val; 
preg_match_all("/($typex)/i", $Type, $isu);
if($isu[0][0]){
$ili .= "$ii|"; echo "<br>$ii -> $Field -> $Type -> ".$isu[0][0];
}
$ii++;
}

//建表SQL指令
$result = mysqli_query($conn, 'SHOW CREATE TABLE ' . $table);
$row = mysqli_fetch_row($result);
$info .= "-- ----------------------------\r\n";
$info .= "-- Table structure for `".$table."`\r\n";
$info .= "-- ----------------------------\r\n";
$info .= $row[1] . ";\n\n";
}

// 导出表数据
$data = '';
foreach ($tables as $table) {
 $result = mysqli_query($conn, 'SELECT * FROM ' . $table);
 $num_fields = mysqli_num_fields($result);
 $num_recrec = mysqli_num_rows($result);
 $data .= "\r\n\r\n-- ----------------------------\r\n";
 $data .= "-- Records for `".$table."` [{$num_recrec}行{$num_fields}列]\r\n";
 $data .= "-- ----------------------------\r\n";
 if($num_recrec<1) continue;
 $data .= "DROP TABLE IF EXISTS `".$table."`;\r\n";
 $data .= 'INSERT INTO ' . $table . ' VALUES ';
 while ($row = mysqli_fetch_row($result)) {
 $data .= '(';
 for ($i = 0; $i < $num_fields; $i++) {
 if (is_null($row[$i])) {
 $data .= 'NULL';
 } elseif (stristr("$ili","|$i|")) {
 $data .= mysqli_real_escape_string($conn, $row[$i]);
 } else {
 $data .= "'" . mysqli_real_escape_string($conn, $row[$i]) . "'";
 }
 if ($i < $num_fields - 1) { $data .= ','; }
 }
 $data .= '),';
 }
 $data = rtrim($data, ',');
 $data .= ";\n";
}

/*
file_put_contents($dbfile, $info);
file_put_contents($dbfile, $data, FILE_APPEND);
*/

echo "<textarea style='width:88%;height:200px;'>$info \r\n $data</textarea>";
?>

php导出Mysql数据含建表SQL和数据支持不加引号字段识别,并以内置函数mysqli_real_escape_string转义影响 SQL的符号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YUJIANYUE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值