📦MySQL一键导入导出(支持Composer加载)

zjkal✅

MysqlHelper 是一个便捷的通过PHP导入和导出Mysql数据库表结构和数据的工具,可以快速实现mysql的数据库的导入和导出.

🧩特性

  • 简单易用: 仅依赖mysqlli扩展,开箱即用
  • 灵活操作: 兼容主流框架,使用更方便
  • 长期维护: 作者为自由职业者,保证项目的长期稳定持续更新

🚀安装

通过Composer导入类库

composer require zjkal/mysql-helper

🌈使用文档

1. 实例化

方式一: 常规方法

use zjkal\MysqlHelper;

$mysql = new MysqlHelper('root', 'root', 'testdatabase', '127.0.0.1', '3306', 'utf8mb4', 'wp_');

方式二: 实例化后,通过setConfig方法设置数据库配置

$mysql = new MysqlHelper();
$mysql->setConfig(['username' => 'root', 'password' => 'root', 'database' => 'testdatabase']);

MysqlHelper针对常用的框架做了兼容,可以直接使用框架的数据库配置, 比如ThinkPHP框架或Laravel框架

$mysql = new MysqlHelper();
$config = config('database.connections.mysql');
$mysql->setConfig($config);

2. 导出数据

//导出数据库(包含表结构和数据)
$mysql->exportSqlFile('test.sql');

//仅导出数据库表结构
$mysql->exportSqlFile('test.sql', false);

//导出指定表的结构和数据
$mysql->exportSqlFile('test.sql', true, ['table1', 'table2']);

3. 导入数据

  • sql文件中的表前缀需要使用__PREFIX__占位符代替
  • 如果实例化时,已经设置了数据库前缀,则可以不用传入第二个参数
//导入数据库
$mysql->importSqlFile('test.sql');

//导入数据库,并自动替换表前缀
$mysql->importSqlFile('test.sql', 'wp_');
692 2 2
2个评论

PHP甩JAVA一条街

1个G的sql,导入稳定吗?

  • zjkal✅ 2023-09-03

    没测试过, 这个包的初衷主要是为webman-admin写插件的时候, 导入install.sql文件

MrMarko

php8.1 用这个有bug 出现了
ErrorException: mysqli::real_escape_string(): Passing null to parameter

  • zjkal✅ 2023-09-21

    导入还是导出? 能不能把完整的错误给我粘一下, 我去找找问题

  • zjkal✅ 2023-09-21

    对了, 会不会哪个参数传了null呢? 比如host, username, password, port等

  • MrMarko 2023-09-22

    导出, 没有null的 我都打印了,你可以尝试装下8试试就知道了, 我修改过现在是可以用的了, 是因为php8不支持了这个操作

  • MrMarko 2023-09-22

    我把你的注释了 改成这样子了
    // if ($withData) {
    // // 导出表数据
    // fwrite($outputFile, "-- 表数据:$table\n");
    // $result = $conn->query("SELECT FROM $table");
    // while ($row = $result->fetch_assoc()) {
    // dump($row);
    // $columns = implode("','", array_map([$conn, 'real_escape_string'], array_values($row)));
    // fwrite($outputFile, "INSERT INTO $table VALUES ('$columns');\n");
    // }
    // if (empty($row)) {
    // fwrite($outputFile, "/
    " . $table . "表没有数据 /\n");
    // }
    // }
    if ($withData) {
    // 导出表数据
    fwrite($outputFile, "-- 表数据:$table\n");
    $result = $conn->query("SELECT
    FROM $table");
    if ($result) { // 检查查询是否成功执行
    while ($row = $result->fetch_assoc()) {
    $escapedValues = array_map(function ($value) use ($conn) {
    return $conn->escape_string(strval($value));
    }, $row);
    $columns = implode("','", $escapedValues);
    $insertStatement = "INSERT INTO $table VALUES ('$columns');\n";
    fwrite($outputFile, $insertStatement);
    }
    if ($result->num_rows === 0) {
    fwrite($outputFile, "/ " . $table . "表没有数据 /\n");
    }
    $result->free(); // 释放结果集内存
    } else {
    fwrite($outputFile, "/ 查询失败或者表不存在 /\n");
    }
    }

  • zjkal✅ 2023-09-23

    有点奇怪, 我刚刚又用PHP8.0和PHP8.1都做了测试, 可以正常导出, 难道和mysql版本有关吗? 你用的是什么版本的mysql呢?

  • MrMarko 2023-09-23

    mysql 8.1.0

  • zjkal✅ 2023-09-23

    我已经查到大概问题了, 也参考你的代码做了一些修改, 跟php版本不大, 主要是这个函数mysql_real_escape_string, 莫名其妙的就是有问题, 也是从网上搜了挺多人遇到的错误才发现的. 所以不再使用它了.

  • MrMarko 2023-09-23

    mysql_real_escape_string 这个函数我一开始就说了呀 就是这个函数的问题呀

  • zjkal✅ 2023-09-23

    就是就是, 你说的对, 是我自己陷入了PHP版本的差异中

  • zjkal✅ 2023-09-23

    我已经发新版了, composer update一下继续用吧, 真心感谢

zjkal✅

350
积分
0
获赞数
0
粉丝数
2023-03-02 加入
🔝