PHP连接MySQL数据库时常见的问题有哪些
大家在用PHP连接MySQL数据库时,经常会碰到各种坑,没连上,报一堆错误,真让人抓狂。先说说PHP连接数据库的两种方式吧:
- 面向对象方式:
$conn = new mysqli('服务器名','用户名','密码','数据库名'); - 面向过程方式:
$conn = mysqli_connect('服务器名','用户名','密码','数据库名');
对了,如果连接时没指定数据库,可以用$conn->select_db('数据库名');或者mysqli_select_db($conn,'数据库名');选定想连接的库。听起来简单,但细节才是王道!
有时候,PHP连不上数据库,可能原因特别多,比如:数据库服务器没启动,用户名密码错误,数据库名填错,还有就是MySQL新版本(8.0以上)用的新认证插件,老版本PHP压根不支持……哎呀,这些都坑死人。比如MySQL8默认用caching_sha2_password认证,PHP 5.6啊,就会报类似“SQLSTATE[HY000] [2054] The server requested authentication method unknown”,这你咋办?办法1:升级PHP版本;办法2:改MySQL密码认证方式为旧的mysql_native_password,简单粗暴有效。
还有超级低级的错误呢:文件名大小写、编码问题。比如文件名不用中文,尽量用英文,万一PHP找不到文件,你还以为数据库断了线,哎哟,不是文件名的问题么!

如何一步步排查PHP数据库连接失败的问题
说到报错,有一堆秘籍,跟你唠唠,帮你排查搞定问题:
- 检查wp-config.php或者你项目里配置数据库的文件:确认
DB_NAME,DB_USER,DB_PASSWORD,DB_HOST无误,别写错了!尤其是密码不对,你连都连不上,别怪人。 - 用Navicat或者其他数据库客户端连一下,如果能连证明服务器和帐号没错,问题就在PHP配置或者代码上。
- 看下数据库服务器的IP和配置,是不是在本地,还是远程?IP没写对或者端口号错了,连接当然失败。
- 确保MySQL服务启动了。Windows的话,看看
mysqld-nt.exe有没有跑,Linux就systemctl status mysql看看状态。 - 检查PHP当前版本跟MySQL版本的兼容性,尤其是认证插件,真别小瞧这个,升级PHP或者调整MySQL认证方式都能拯救你。
- 查查代码文件名和编码,英文名最安全,UTF-8编码更稳,汉字或者GBK容易出错。
- 如果复制了别人源码,记得换成自己的数据库用户名和密码,别傻傻拿着别人的账号跑。
- ThinkPHP这类框架,配置文件里经常出错特别多,字段配错、端口号忘填、前缀写错,哎呀,不容忽视。
这些步骤按部就班检查真心超有用,亲测好几次,问题统统搞定!

相关问题解答
- 为什么PHP连MySQL总是失败?
哎呀,这其实挺常见,通常是用户名、密码错了,或者数据库没有启动。还有啊,现在MySQL新版本用了新认证方式,老PHP压根不认账,所以你得升级PHP或者改密码认证方式。不然就卡死在那里,哎呦喂。
- Navicat能连,PHP却不行,这是为什么?
这一般是环境配置差异导致的。可能你用Navicat的时候用的IP和端口对,但PHP代码里写的可能不对,或者PHP没开启相关扩展。还有呢,PHP和MySQL版本不兼容,也会让连接挂掉。
- 我的PHP代码里数据库配置文件改了,但连接还是报错咋办?
这多半是缓存或者配置文件加载没生效。你可以重启PHP服务或者服务器试试。还有啊,确认你改的文件就是项目里真正被用的配置文件,有些项目配置层层套,会找错文件哦。
- 连接MySQL 8.0时提示认证方法错误该怎么解决?
这问题真烦人!其实啊,最直接的方法就是升级PHP版本,毕竟新认证方式只能新PHP支持。如果升级不方便,可以在MySQL里把用户认证方式调回mysql_native_password,用命令改下密码认证方式,马上可以连,简单又有效。
新增评论