ThinkPHP 5.12中重置管理员密码需先确认加密方式(MD5或password_hash),再编写对应SQL更新think_admin表密码字段,推荐通过命令行插件或自定义指令安全执行,并执行缓存清理与登录验证。

ThinkPHP 5.12 中执行 SQL 文件来修改管理员密码,核心是绕过登录验证,直接更新数据库中用户表的密码字段。关键在于:SQL 文件内容必须匹配当前系统实际使用的密码加密方式(如 MD5 或 password_hash()),且需通过安全、可控的方式执行。
确认密码加密方式再写SQL
盲目执行 SQL 可能导致无法登录。先检查项目中密码处理逻辑:
- 查看登录验证代码(如
application/admin/controller/Login.php),找类似md5($pwd)或password_hash($pwd, PASSWORD_DEFAULT)的写法 - 若用 MD5,常见写法是
md5($pwd . 'salt'),需确认是否存在盐值(salt)及具体拼接规则 - 若用
password_hash(),生成的密码是带算法标识的字符串(如$2y$10$...),不能用普通 MD5 值替代
编写可直接运行的SQL文件
假设你已确认系统使用纯 MD5(无 salt),管理员表为 think_admin,用户名为 admin,想将密码设为 123456:
UPDATE `think_admin` SET `password` = 'e10adc3949ba59abbe56e057f20f883e' WHERE `username` = 'admin';
其中 e10adc3949ba59abbe56e057f20f883e 是 md5('123456') 的结果。可用在线工具或 PHP 函数生成对应哈希值。
立即学习“PHP免费学习笔记(深入)”;
在ThinkPHP中安全执行该SQL文件
不建议手动在数据库工具中执行(易出错、难追溯),推荐两种规范方式:
-
方式一:使用命令行 + tp_password_reset 插件(推荐)
下载插件后解压到extend/,运行php think tp_password_reset,它会自动读取并执行配套的tp_password_reset.sql脚本,兼容 TP5.1+ -
方式二:临时添加一个命令行指令
在application/command下新建ResetAdminPassword.php,用Db::execute()执行你的 SQL 字符串;然后运行php think reset_admin_password
执行后必须验证和清理
SQL 执行成功不等于密码生效:
- 清空应用缓存:
php think clear,避免旧缓存干扰 - 用新密码尝试登录后台,确认能进且权限正常
- 立即删除临时脚本或禁用重置命令,防止被恶意调用
- 检查数据库连接是否仍正常(尤其改密后常因配置未同步导致白屏)



















