90%是wp-config.php配置与phpEnv的MySQL实际状态不匹配,或MySQL服务未真正运行;需检查mysqld进程、确认DB_NAME存在、DB_USER为root且密码为空、DB_HOST用127.0.0.1:3306、并验证用户权限与表结构完整性。

phpEnv 环境下 WordPress 报 “Error establishing a database connection”,90% 是 wp-config.php 配置与本地 MySQL 实际状态不匹配,或 MySQL 服务根本没起来。
检查 mysql 进程是否真在运行
phpEnv 是轻量级本地环境,不像 XAMPP 或 Laragon 那样自动托管服务状态,MySQL 很可能处于“假启动”或已崩溃状态。
- 打开终端,执行
ps -ef | grep mysql—— 如果只看到grep自身进程,说明mysqld没跑 - 手动启动:进入 phpEnv 安装目录下的
mysql\bin,运行mysqld --console(加--console能直接看到报错,比如端口被占、my.ini路径错、data 目录损坏) - 常见卡点:
bind-address = 127.0.0.1被误改成0.0.0.0导致权限拒绝;port被其他程序(如 Docker、另一个 MySQL)占用;datadir指向了不存在或无读写权限的路径
wp-config.php 里这四行必须和 phpEnv 的 MySQL 实际一致
phpEnv 默认 MySQL 用户是 root,密码为空,数据库地址是 127.0.0.1(不是 localhost),端口通常是 3306 —— 但如果你改过配置,就得严格对齐。
-
define('DB_NAME', 'your_db_name');—— 数据库名必须已存在,不能只是“想当然创建了” -
define('DB_USER', 'root');—— phpEnv 不默认启用mysql_native_password插件,如果用新版本 MySQL 8+ 初始化过 root,可能需要重置认证方式:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; -
define('DB_PASSWORD', '');—— 空密码别写成''以外的任何值(比如空格、null字符) -
define('DB_HOST', '127.0.0.1:3306');—— 强烈建议写死端口,且用127.0.0.1;localhost在 Windows 下会走命名管道,容易失败
确认数据库用户有权限且表结构没损坏
phpEnv 启动后,用命令行或 phpMyAdmin(如果已配)连进去看一眼,比猜强得多。
立即学习“PHP免费学习笔记(深入)”;
- 执行
mysql -u root -P 3306 -e "SHOW DATABASES;",确认DB_NAME在列表里 - 执行
mysql -u root -P 3306 -D your_db_name -e "SHOW TABLES;",至少应看到wp_options、wp_users等核心表;如果报Table 'your_db_name.wp_options' doesn't exist,说明 WordPress 没成功安装,或数据库被清空过 - 若表存在但报错仍持续,可能是
wp_options表损坏,可尝试修复:REPAIR TABLE wp_options;(在对应数据库内执行) - 不要依赖 phpEnv 自带的“一键建库”功能——它有时只建库不赋权,务必手动验证
GRANT ALL ON your_db_name.* TO 'root'@'127.0.0.1'; FLUSH PRIVILEGES;
phpEnv 特有的坑:端口冲突、服务未注册、SSL 强制开启
phpEnv 的 MySQL 默认不作为 Windows 服务安装,每次重启后需手动启;另外某些新版 phpEnv 包含的 MySQL 8.0+ 默认启用 SSL,而 WordPress 的 mysqli 扩展若没配证书会静默失败。
- 检查 MySQL 错误日志:通常在 phpEnv 安装目录的
mysql\data\*.err文件里,搜ERROR或Aborted connection - 临时禁用 SSL 验证(仅调试用):在
my.ini的[mysqld]段下加skip_ssl,然后重启mysqld - 确认 phpEnv 的 PHP 版本和 MySQL 扩展匹配:比如 PHP 8.2 需要
mysqli和pdo_mysql启用,且extension_dir指向正确的ext路径,否则class-wpdb.php会报mysqli_real_connect(): (HY000/2002)
最常被忽略的一点:phpEnv 的 MySQL 启动依赖于当前 CMD 窗口生命周期,关掉窗口就等于 kill 掉 mysqld。别只图方便双击 start.bat 就以为万事大吉——得盯住黑窗有没有闪退,错误日志有没有滚动输出。



















