错误原因是node.js未安装mysql2模块或路径不正确,需进入项目目录执行npm install mysql2并改用require('mysql2'),同时确认__dirname和node执行路径。

phpEnv里Node.js报Cannot find module 'mysql',不是PHP问题
这个错误和phpEnv本身无关,是Node.js进程在运行时找不到mysql模块——它压根没装,或者装在了别的地方。phpEnv只是个PHP环境管理工具,不负责管Node.js的node_modules。你得确认Node.js脚本是在哪个目录下执行、用的是哪个node、有没有进对项目根目录再npm install。
检查当前工作目录和Node.js执行路径
Node.js默认只在当前目录及其父级的node_modules里找模块。如果你从phpEnv的Web根目录(比如D:\phpEnv\www\)直接调用Node.js脚本,但mysql装在D:\myproject\node_modules里,就必然报错。
- 在Node脚本开头加
console.log(__dirname),确认它运行在哪 - 用
which node(Linux/macOS)或where node(Windows)查实际调用的node路径,避免phpEnv自带的旧版本干扰 - 如果脚本由PHP的
exec()触发,确保chdir()到项目目录后再执行,否则node会按PHP进程的CWD去找node_modules
别装全局mysql,改用mysql2
mysql包已多年未维护,官方推荐迁移到mysql2;而且全局安装(npm install -g mysql)对require无效——Node.js默认不查全局node_modules。
- 进你的Node项目目录,运行:
npm install mysql2 - 代码里把
require('mysql')换成require('mysql2') - 如果用了TypeScript或ESM,注意
mysql2/promise才是原生Promise支持入口
Windows下PATH和权限容易串
phpEnv常集成轻量版Node,但它可能和你系统PATH里的Node冲突;另外Windows下若用管理员身份装过npm包,普通用户运行时可能因权限隔离读不到node_modules。
- 关掉所有终端,重新打开CMD/PowerShell,执行
node -v && npm root -g,看输出是否一致 - 删掉
%APPDATA%\npm\node_modules下残留的mysql(如果有),避免require误加载 - 不要用“以管理员身份运行”CMD来装依赖,除非明确需要全局命令行工具
真正卡住的地方往往不是模块名写错,而是Node.js根本没在你认为的那个上下文里运行——先盯死__dirname和npm ls mysql2的输出,比反复重装快得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











