phpEnv 的 my.ini 文件通常位于 C:\phpEnv\mysql\my.ini,而非 PHP 目录;它仅控制 MySQL 服务启动行为(如端口、编码),不参与 PHP 连接过程,PHP 连接需在代码中显式指定 host 和 port。

phpEnv 的 my.ini 文件通常不在 PHP 目录下,而在 MySQL 实例目录中
phpEnv 是 Windows 下的便携式 PHP+MySQL 环境套件,它把 PHP 和 MySQL 分开管理。很多人误以为修改 php.ini 就能改 MySQL 连接参数,其实不是——my.ini 是 MySQL 服务自身的配置文件,和 PHP 完全无关,只影响 MySQL 启动行为(如端口、编码、数据路径等)。
常见位置有三个,按优先级依次检查:
-
C:\phpEnv\mysql\my.ini(最常见,phpEnv 默认安装结构) -
C:\phpEnv\mysql\bin\my.ini(部分旧版本放在这里) -
C:\phpEnv\mysql\data\my.ini(极少见,仅当初始化时自动生成)
如果全都没找到,打开 phpEnv 主界面 → 点击「MySQL」→ 查看「服务路径」或「数据目录」,路径末尾的父目录大概率就是 my.ini 所在位置。别依赖搜索“my.ini”,phpEnv 有时会用 my-default.ini 作模板,但真正生效的是重命名为 my.ini 的那个。
修改 my.ini 前必须停止 MySQL 服务,否则更改不生效
phpEnv 界面右下角托盘图标 → 右键 → 「MySQL → Stop」;或者命令行执行:net stop mysql_phpEnv(服务名可能带版本号,如 mysql_phpEnv80)。直接编辑 my.ini 后不关服务就重启 PHP,MySQL 仍按旧配置运行。
立即学习“PHP免费学习笔记(深入)”;
典型需改的项(仅改 [mysqld] 段):
-
port=3307:避免和系统已装 MySQL 冲突,改完记得在 PHP 连接时显式传端口 -
character-set-server=utf8mb4:比 utf8 更完整支持 emoji 和四字节字符 -
bind-address=127.0.0.1:保持默认即可,phpEnv 默认不开放远程访问 -
max_allowed_packet=64M:上传大字段或批量导入时必调
改完保存,再通过 phpEnv 启动 MySQL。若启动失败,看错误日志:C:\phpEnv\mysql\data\*.err,90% 是语法错(比如漏了 =、引号不闭合)或路径不存在。
PHP 连接 MySQL 不读 my.ini,而是靠 mysqli_connect() 或 DSN 参数
这是最大误区:my.ini 不控制 PHP 怎么连 MySQL,只控制 MySQL 本身怎么运行。PHP 连接时用的 host/user/password/port 全由代码或环境变量决定,和 my.ini 里的 default-user 之类完全无关(MySQL 5.7+ 已弃用该参数)。
所以你改了 my.ini 里的 port,PHP 代码里还写 mysqli_connect('localhost', ...),就会连不上——因为默认走 3306,而 MySQL 已监听 3307。
正确做法:
- 面向过程:
mysqli_connect('127.0.0.1', 'root', '', 'test', 3307)(必须写127.0.0.1,不能写localhost,否则走 socket) - PDO DSN:
mysql:host=127.0.0.1;port=3307;dbname=test;charset=utf8mb4 - 环境变量方式(推荐):
$_ENV['DB_HOST'] = '127.0.0.1'; $_ENV['DB_PORT'] = '3307';,再在代码里读取
phpEnv 中 MySQL root 密码不是存在 my.ini 里,而是初始化时写死或可重置
phpEnv 安装时一般设 root 密码为空或 root,这个密码不存于 my.ini,而是在 MySQL 数据目录的系统表里(mysql.user)。如果你忘了密码,不能靠改配置恢复,得进安全模式重置:
- 先停 MySQL 服务
- 命令行进
C:\phpEnv\mysql\bin,执行:mysqld --skip-grant-tables --shared-memory - 另开一个命令行,连上去:
mysql -u root(此时无需密码) - 执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; FLUSH PRIVILEGES; - 关掉 mysqld 进程,正常启 phpEnv 的 MySQL 服务
注意:my.ini 里没有 password 字段,任何教程让你往里面加 password=xxx 都是错的,MySQL 早就不支持这种写法了。
真正容易被忽略的点:phpEnv 的 MySQL 服务名、端口、root 密码三者是绑定的,改其中一个,另外两个的使用方式很可能要同步调整;而 my.ini 只管 MySQL 自身行为,不管 PHP 怎么连——分清这个边界,才能避免反复试错。



















