PHP は、テーブル SQL と引用符で囲まれていないフィールド識別のためのデータ サポートを含む MySQL データをエクスポートします

<?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 はテーブル SQL やデータを含む MySQL データをエクスポートし、引用符で囲まれていないフィールド識別をサポートし、組み込み関数 mysqli_real_escape_string を使用して SQL に影響するシンボルをエスケープします。

おすすめ

転載: blog.csdn.net/YUJIANYUE/article/details/130664930
おすすめ