windows下实现php与数据库联动,本质是让php通过mysqli或pdo_mysql扩展连接并操作mysql服务,需apache、php、mysql三服务同时运行,且必须启用对应扩展、配置正确参数并完成密码与认证协议适配。

直接说结论:Windows下实现PHP与数据库联动,本质是让PHP能通过扩展(如mysqli或pdo_mysql)连接并操作MySQL服务——这四步缺一不可,但最容易卡在第三步(扩展启用)和第四步(连接测试)。
Apache + PHP + MySQL 三个服务必须同时运行
很多人只启动了Apache,忘了MySQL,结果mysqli_connect()报错“Connection refused”或“Can't connect to MySQL server”。XAMPP控制面板里Apache和MySQL两个状态都得是绿色“Running”,不能只看Apache。
常见错误现象:
- 浏览器能打开
http://localhost,但phpinfo()里看不到mysqli或PDO模块 -
mysqladmin -u root password失败,提示“Access denied”,说明MySQL根本没起来或密码不对
实操建议:
- 启动前先关掉Skype、IIS、Web Deploy等可能抢占
80(Apache)或3306(MySQL)端口的程序 - 如果MySQL启动失败,直接双击
XAMPP\mysql\bin\mysqld.exe看命令行报错,比控制面板日志更直观 - 确认MySQL服务名是否为
mysql(非MySQL80等),否则net start mysql会失败
php.ini 中必须启用 mysqli 和 pdo_mysql 扩展
哪怕XAMPP自带PHP,php.ini默认也大多注释掉了数据库扩展。不手动取消注释,PHP就根本不知道怎么连MySQL。
实操建议:
- 找到真实生效的
php.ini:用php --ini查路径,或在phpinfo()页面搜索“Loaded Configuration File” - 编辑该文件,确保以下两行前面没有分号:
extension=mysqli和extension=pdo_mysql - 如果用的是PHP 8.0+,
mysql扩展已彻底移除,别再找extension=mysql——它不存在 - 改完后必须重启Apache,否则修改不生效;仅刷新页面或重开终端没用
PHP代码里用 mysqli_connect() 连接时参数要匹配MySQL实际配置
最常错在用户名、密码、主机地址三者之一不一致。尤其是新手习惯写mysqli_connect('localhost', 'root', ''),但XAMPP新版本默认root密码已不是空,而是''(空字符串)或已被设为123456等自定义值。
实操建议:
- 先用命令行验证MySQL登录:
mysql -u root -p,回车后若直接进去了,密码为空;若提示输入密码,就按实际输 - PHP中连接写法优先用
mysqli_connect('127.0.0.1', 'root', 'your_password', 'testdb', 3306),不用localhost——Windows下localhost可能走命名管道而非TCP,导致连接行为不一致 - 连接失败时,加
or die(mysqli_connect_error())立刻暴露错误,比如“Access denied for user”说明认证失败,“Connection refused”说明MySQL没运行
首次使用 phpMyAdmin 前必须设置 root 密码(否则PHP连接会失败)
很多人跳过这步,以为“空密码=能连”,但XAMPP 8.0+默认启用了auth_plugin = caching_sha2_password,而旧版mysqli扩展不支持该插件——导致明明密码对,mysqli_connect()仍返回“Client does not support authentication protocol”。
实操建议:
- 访问
http://localhost/phpmyadmin,点右上角“用户账户”,找到root@localhost,点击“编辑权限” → “更改密码”,选“使用加密”并填新密码 - 或者用SQL执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES; - 改完后,在PHP连接代码里同步更新密码,并确保
mysqli扩展版本 ≥ 7.4(XAMPP 8.0+通常满足)
真正容易被忽略的点是:MySQL服务、PHP扩展、认证协议、密码四者必须全部对齐。少对一个,mysqli_connect()就只是返回false,不会告诉你具体哪一环断了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











