phpEnv 不自带 MySQL,需手动集成本地 MySQL 5.6:下载解压 zip 版→配置 ANSI 编码的 my.ini→管理员运行 mysqld --initialize-insecure→注册服务→启动→修改 php.ini 启用 mysqli 和 pdo_mysql 扩展→PHP 连接时用 127.0.0.1 而非 localhost。
phpEnv 本身不自带 MySQL,所谓“phpEnv 安装 MySQL”其实是手动集成 MySQL 到 phpEnv 环境中——关键不是装 phpEnv,而是让 phpEnv 下的 PHP 能连上你本地独立安装的 MySQL 5.6 实例。
为什么 phpEnv 没有内置 MySQL?
phpEnv 是一个 PHP 版本管理工具(类似 pyenv),专注切换
和对应扩展,不负责数据库服务。它默认只管 PHP 运行时,MySQL 必须单独部署、启动,并确保 PHP 扩展能通信。
常见误解:以为
可行 —— 实际不存在该命令
真实路径:下载 MySQL 5.6 zip 包 → 解压 → 配置
→ 注册 Windows 服务 → 启动 → 修改 PHP 的
启用扩展
phpEnv 管的只是
路径和
,它不修改系统服务或环境变量中的
(这点容易漏)
MySQL 5.6 解压版配置要点(Windows)
MySQL 5.6 官方已停止维护,但仍有老项目依赖,必须用 zip 免安装版(msi 安装包在 5.6 后期已难找,且与 phpEnv 手动集成逻辑冲突)。
解压后重命名
为
,否则
会忽略配置
和
路径必须用正斜杠
或双反斜杠
,单反斜杠
在 Windows ini 文件中可能被解析为转义符
文件编码必须是 ANSI(非 UTF-8),否则服务启动失败且报错
注册服务前,先以管理员身份运行:
(生成空密码 root 用户);再执行
首次启动后,立刻用
登录并执行
,否则后续 PHP 连接会因密码为空被拒绝(MySQL 5.6 默认不允许空密码远程连接)
PHP 扩展启用与连接验证(phpEnv + MySQL 5.6)
phpEnv 切换到目标 PHP 版本后,需确认
中三项配置全部生效,缺一不可:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
指向正确的扩展目录,例如:
(路径需与你 phpEnv 当前激活版本一致)
取消注释这三行(注意:5.6 仍支持
,但已废弃;推荐只开
和
):
检查
输出是否含
和
;若无,说明
错误或 DLL 文件缺失
写个测试脚本:
,不要用
(Windows 下可能走 socket 导致超时)
容易被忽略的兼容性陷阱
MySQL 5.6 与较新 PHP 5.6.x(如 5.6.40)搭配时,几个静默失败点:
在
中留空即可,不要填
(Windows 没这文件,填了反而触发连接失败)
若用 Apache,确保
指向的
与当前 PHP 版本严格匹配(VC11/VC14、x86/x64),否则 Apache 启动报错
phpEnv 激活某 PHP 版本后,
显示的配置文件路径可能不是你编辑的那个 —— 它优先读取
环境变量指定路径,而非当前目录下的
MySQL 5.6 默认
包含
,插入空字符串到
字段会直接报错,PHP 层不会抛异常,只返回
,需检查
真正卡住人的往往不是安装步骤,而是 ini 文件编码、PATH 未刷新、socket 与 TCP 混用、以及 phpEnv 的
覆盖机制 —— 这些地方没日志、不报错,只让连接一直失败。
php.exephpenv install mysqlmy.iniphp.iniPHP_BINARYextension_dirPATHmy-default.inimy.inimysqld --installbasedirdatadir/\my.iniUnknown suffix '.' on line 1mysqld --initialize-insecure --user=mysqlmysqld -installmysql -u root --skip-passwordSET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');php.iniextension_dirextension_dir = "D:/phpEnv/php/5.6.40/ext"php_mysql.dllphp_mysqli.dllphp_pdo_mysql.dllextension=php_mysqli.dllextension=php_pdo_mysql.dllphp -m | findstr mysqlmysqlipdo_mysqlextension_dirlocalhostmysql.default_socketphp.inimysql.sockLoadModule php5_modulephp5apache2_4.dllInvalid module errorphp --iniPHPRCphp.inisql_modeSTRICT_TRANS_TABLESNOT NULLfalsemysqli_error()PHPRC