php查询mysql数据库,获取每个表,然后输出每个表前八条数据。

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();

 

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容