phpEnv本身不连接数据库,它仅启动MySQL服务;PHP应用需通过127.0.0.1:3306连接,前提是MySQL已启动、mysqli/pdo_mysql扩展已启用、database.php中hostname设为127.0.0.1、密码正确且数据库已存在。

phpEnv 本身不“连接数据库”,它只是个集成环境,负责启动 MySQL 服务;真正要连接数据库的是你的 PHP 应用代码或框架。关键点在于:MySQL 服务得先跑起来,PHP 才能连上 localhost:3306。
确认 phpEnv 中的 MySQL 服务已启动
这是最容易被跳过的一步——很多人改完配置却连不上,其实 MySQL 根本没在运行。
- 打开 phpEnv 主界面,检查「服务状态」里
MySQL8是否显示「已启动」(不是「未启动」或「启动中」) - 如果没启动,点击右侧「启动」按钮;若失败,看日志里是否提示端口被占(比如 3306 被 Navicat、Docker 或另一个 MySQL 占了)
- 启动成功后,在命令行执行:
mysql -u root -p,回车后直接输空密码(默认无密码)或你设的密码,能进 MySQL 命令行就说明服务通了
ThinkPHP8 中配置 database.php 连接 phpEnv 的 MySQL
TP8 默认用 config/database.php 配置数据库,它不读 .env(除非你手动加了 dotenv 支持),所以得直改数组。
- 路径是:
app/config/database.php(TP8.0+ 通常在config/database.php) - 重点改这几个键:
'hostname'必须是'127.0.0.1'(别写localhost,Windows 下有时解析慢或失败);'hostport'设为3306;'username'和'password'默认是'root'和空字符串 - 如果 phpEnv 安装时你改过 MySQL 密码,必须同步填到
'password'里,否则报Access denied for user 'root'@'localhost' - 确保
'database'填的是已存在的库名(比如先用 phpMyAdmin 或命令行建好test_db),不然 TP 启动时会报Unknown database
测试连接是否真通:用原生 mysqli 写个最小验证脚本
别急着跑框架,先甩开 TP,用最简代码验证 PHP 和 MySQL 通信是否正常——这能快速定位是环境问题还是框架配置问题。
立即学习“PHP免费学习笔记(深入)”;
- 在网站根目录下新建
test_db.php,内容如下:
<?php
$mysqli = new mysqli('127.0.0.1', 'root', '', 'test_db', 3306);
if ($mysqli->connect_error) {
die('Connect Error: ' . $mysqli->connect_error);
}
echo 'OK, MySQL is reachable';
$mysqli->close();
?>- 用浏览器访问
http://www.tp.com/test_db.php(假设你配了虚拟主机),输出OK, MySQL is reachable才算过关 - 如果报
Class 'mysqli' not found,说明 php.ini 没启用 mysqli 扩展:打开 phpEnv → PHP → 选择版本 → 「扩展管理」→ 勾选mysqli和pdo_mysql
常见报错和对应解法
连不上时,错误信息比“连不上”三个字重要得多。
-
Connection refused:MySQL 服务没开,或端口不对(确认 phpEnv 里 MySQL 版本对应端口,MySQL8 默认 3306) -
Access denied for user 'root'@'127.0.0.1':密码错,或用户权限没给到127.0.0.1(phpEnv 默认只给了localhost,需进 MySQL 执行:CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '';+GRANT ALL ON *.* TO 'root'@'127.0.0.1';) -
Unknown database 'xxx':库不存在,不是配置错,是压根没创建,用 phpMyAdmin 或mysql -u root -e "CREATE DATABASE xxx"补一个 - TP8 报
SQLSTATE[HY000] [2002] No such file or directory:这其实是 Unix socket 路径问题,Windows 下基本不会出现;但如果你在 WSL 或非标准安装里混用,就得查mysqli.default_socket配置
真正卡住的地方,往往不在配置文件写了什么,而在于 MySQL 进程是否监听了 127.0.0.1:3306 这个地址——用 netstat -ano | findstr :3306 看一眼,比翻十遍文档都管用。



















