这是典型的架构不匹配错误:64位Windows上运行32位PHP(或反之),php_mysqli.dll架构与PHP不一致;需通过phpinfo()确认PHP和系统架构,检查extension_dir路径及DLL文件位数,并验证libmysql.dll等依赖项是否同为x64或x86。

这是典型的架构不匹配错误:你正在 64 位 Windows 上运行 32 位 PHP(或反之),而 php_mysqli.dll 是为另一架构编译的。 它和扩展名、路径、权限都无关,只和“位数是否对得上”有关。
确认 PHP 架构与系统是否匹配
别猜,直接看 phpinfo() 页面最顶部两行:
-
Architecture显示x64→ 你用的是 64 位 PHP -
Architecture显示x86→ 你用的是 32 位 PHP -
System显示Windows NT x64→ 系统是 64 位
常见错配场景:
- XAMPP 官网下载了
x64版本,但 Apache 或 PHP 实际加载的是旧版 32 位模块(比如混用了 WAMP 的php.ini) - 手动替换了
php_mysqli.dll,却从 32 位 PHP 包里拿了文件塞进 64 位环境 - 某些国产“一键集成包”偷偷替换了 Apache 的
httpd.exe,导致它以 32 位模式加载所有 DLL
检查 extension_dir 和 DLL 文件本身
即使 phpinfo() 显示 PHP 是 x64,也不能默认 php_mysqli.dll 就是 x64 版——它可能来自别的地方。
立即学习“PHP免费学习笔记(深入)”;
- 在
phpinfo()页面搜索extension_dir,确认路径指向的是当前 PHP 版本的ext/目录(如C:\xampp\php\ext) - 进入该目录,右键
php_mysqli.dll→ 属性 → 详细信息 → 查看“文件版本”和“产品版本”,再点“兼容性”选项卡 → 点“更改高 DPI 设置”旁的“设置”按钮 → 勾选“替代高 DPI 缩放行为”,然后点确定 → 回到属性页,切换到“常规”→ 点“数字签名”→ 点“详细信息”,查看签名中是否含x64或x86 - 更可靠的方法:用
file命令(需安装 Git for Windows 或 Cygwin):file C:\xampp\php\ext\php_mysqli.dll,输出含PE32+ executable (DLL) (GUI) x86-64才是真 x64
Windows 下 DLL 加载失败的隐藏依赖链
php_mysqli.dll 不是孤立文件,它依赖 MySQL 客户端库(libmysql.dll 或 libmariadb.dll)。如果这个依赖是 32 位的,而 PHP 是 64 位,照样报 “not a valid Win32 application”。
- 打开
C:\xampp\mysql\bin\,检查是否存在libmysql.dll;若存在,用上面file命令验证其架构 - 若你改过
php.ini中的extension_dir,或把 DLL 放到了非标准路径,PHP 可能从C:\Windows\System32或C:\xampp\apache\bin加载了旧版libmysql.dll - 临时解决法:把
C:\xampp\mysql\bin\libmysql.dll复制到C:\xampp\apache\bin\(Apache 启动时优先查这里),并确保它和 PHP 架构一致
重装 XAMPP 是最快止损方式
当多个组件位数混乱、DLL 路径交叉污染、且你无法快速定位哪一层出错时,重装比逐个修复更省时间。
- 去官网下载与你的系统完全匹配的 XAMPP 版本:
xampp-windows-x64-8.2.12-0-VC15.exe(注意末尾x64和VC15必须与你的 PHP 版本一致) - 卸载前备份
\xampp\htdocs和\xampp\mysql\data,其余全部删掉 - 安装时**不要**勾选 “Learn more about Bitnami for XAMPP”,它会额外注入不兼容模块
- 装完后立刻访问
http://localhost/dashboard/phpinfo.php,确认Architecture和System对齐,再查mysqli是否已启用
真正容易被忽略的是:Apache 进程的位数决定了它能加载什么 DLL,而这个位数未必和 PHP CLI 的位数一致。控制面板里点“Start”启动的是 Apache,不是 PHP CLI —— 所以 php -v 显示 x64,不代表 Web 环境就是 x64。



















