php代碼
<?php
/**
* 導出 MySQL 數據庫的表結構及每個表的前 8 條數據
* 數據按 id 倒序(若無 id 則按主鍵/第一列倒序)
* 數據庫:111,用戶名:11111,密碼:1111
*/
$host = 'localhost';
$user = '1111';
$pass = '11111111111111111';
$dbname = '111';
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
$conn->set_charset("utf8mb4");
// 輸出文件頭
echo "-- 導出數據庫: $dbname\n";
echo "-- 生成時間: " . date('Y-m-d H:i:s') . "\n";
echo "-- 每個表導出前 8 條數據,按 id(或主鍵/首列)倒序排列\n\n";
echo "SET FOREIGN_KEY_CHECKS=0;\n\n";
// 獲取所有表
$tablesResult = $conn->query("SHOW TABLES");
if (!$tablesResult) {
die("獲取表列表失敗: " . $conn->error);
}
while ($row = $tablesResult->fetch_row()) {
$table = $row[0];
// 1. 導出表結構
$createResult = $conn->query("SHOW CREATE TABLE `$table`");
if (!$createResult) {
echo "-- 無法獲取表 `$table` 的結構,跳過\n\n";
continue;
}
$createRow = $createResult->fetch_assoc();
$createSQL = $createRow['Create Table'];
echo "-- 表結構: `$table`\n";
echo "DROP TABLE IF EXISTS `$table`;\n";
echo $createSQL . ";\n\n";
// 2. 獲取表的列名,確定排序字段(優先 id,其次主鍵,最後第一列)
$colsResult = $conn->query("SHOW COLUMNS FROM `$table`");
$colNames = [];
while ($col = $colsResult->fetch_assoc()) {
$colNames[] = $col['Field'];
}
$orderCol = null;
if (in_array('id', $colNames)) {
$orderCol = 'id';
} else {
// 嘗試獲取主鍵
$pkQuery = $conn->query("SHOW KEYS FROM `$table` WHERE Key_name = 'PRIMARY'");
if ($pkQuery && $pkQuery->num_rows > 0) {
$pkRow = $pkQuery->fetch_assoc();
$orderCol = $pkRow['Column_name'];
} else {
// 取第一列(如果存在)
$orderCol = $colNames[0] ?? null;
}
}
// 構建 ORDER BY 子句
$orderClause = $orderCol ? "ORDER BY `$orderCol` DESC" : "";
// 3. 導出前 8 條數據(按指定字段倒序)
$dataResult = $conn->query("SELECT * FROM `$table` $orderClause LIMIT 8");
if (!$dataResult) {
echo "-- 無法查詢表 `$table` 的數據,跳過\n\n";
continue;
}
if ($dataResult->num_rows > 0) {
// 獲取字段列表
$fields = $dataResult->fetch_fields();
$fieldNames = array_map(function($f) {
return "`" . $f->name . "`";
}, $fields);
$fieldList = implode(", ", $fieldNames);
// 組裝多行 INSERT
$insertPrefix = "INSERT INTO `$table` ($fieldList) VALUES ";
$rows = [];
while ($dataRow = $dataResult->fetch_assoc()) {
$values = [];
foreach ($dataRow as $key => $val) {
if ($val === null) {
$values[] = "NULL";
} else {
$escaped = $conn->real_escape_string($val);
$values[] = "'" . $escaped . "'";
}
}
$rows[] = "(" . implode(", ", $values) . ")";
}
echo $insertPrefix . implode(", ", $rows) . ";\n\n";
}
$dataResult->free();
}
$tablesResult->free();
echo "SET FOREIGN_KEY_CHECKS=1;\n";
$conn->close();