php连接数据库报错咋回事_php数据库连接错误排查法【技巧】
技术百科
看不見的法師
发布时间:2026-01-27
浏览: 次 PHP连数据库90%是配置或权限问题:先查Connection refused/Unknown host确认网络层,再查Access denied核对账号密码和主机限制,MySQL 8+需处理caching_sha2_password兼容性,连接后注意选库、字符集及资源释放。
PHP 连数据库报错,90% 是配置或权限问题,不是代码写错了。先别急着重写 mysqli_connect(),按顺序查这几点,多数能 5 分钟内定位。
看错误信息里有没有 Connection refused 或 Unknown MySQL server host
这是最典型的网络层失败,说明 PHP 根本没连上 MySQL 服务本身:
-
Connection refused:MySQL 没启动,或监听的端口(默认 3306)被防火墙拦了,或配置成只监听127.0.0.1却用localhost(部分系统下会走 socket 而非 TCP) -
Unknown MySQL server host:$host值写错了,比如填了mysql://xxx、拼错容器名(Docker 环境常见),或 DNS 解析失败(尤其在 Alpine 镜像里缺resolvconf) - 临时验证法:在 PHP 服务器上执行
telnet 127.0.0.1 3306或nc -zv 127.0.0.1 3306,通了再查账号密码
mysqli_connect(): (HY000/1045): Access denied for user 怎么解
账号密码错、用户不存在、主机限制不匹配,三者占绝大多数:
- 检查
mysqli_connect($host, $user, $password, $dbname, $port)里$user和$password是否和mysql -u xxx -p登录时一致(注意空格、特殊字符是否被 she
ll 吃掉)
- 登录 MySQL 执行
SELECT User, Host FROM mysql.user;,确认该用户允许从你的 PHP 所在 IP(如'myapp'@'172.18.0.%')连接,不是仅限'root'@'localhost' - Docker 或远程环境常见坑:MySQL 用户 Host 设为
%,但 MySQL 8+ 默认用caching_sha2_password插件,PHP 7.4 以下不支持——降级插件或升级 PHP
用 PDO 连接却抛出 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
这是 MySQL 8+ 和旧版 PDO 的经典兼容性冲突,本质是认证协议不匹配:
- 根本原因:MySQL 8 默认用
caching_sha2_password,而老 PDO 扩展只认mysql_native_password - 速修方案(开发环境):进 MySQL 执行
ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass'; FLUSH PRIVILEGES; - 长期方案:PHP 升级到 7.4+,并确保
pdo_mysql扩展已启用(php -m | grep pdo) - 别碰
default_authentication_plugin全局改配置——会影响其他应用
连得上但查不出数据,mysqli_connect() 返回 resource 却后续操作失败
这往往不是连接问题,而是连接后没选库、字符集不一致、或连接被意外关闭:
- 显式调用
mysqli_select_db($conn, $dbname),别依赖mysqli_connect()第四个参数——某些旧版本不生效 - 立即执行
mysqli_set_charset($conn, 'utf8mb4'),否则中文存成乱码,查出来也是空或报错 - CLI 模式*意:如果用了
mysqli_close($conn)又继续用$conn,会报mysqli_query(): Couldn't fetch mysqli——资源已被释放
真正难排查的,往往是连接成功后因超时、DNS 缓存、SELinux 限制或 MySQL 的 max_connections 耗尽导致的间歇性失败。这类问题得看 SHOW PROCESSLIST 和 MySQL 错误日志,而不是死盯 PHP 报错行。
# app
# word
# linux
# 防火墙
# 端口
# docker
# dns
# 数据库
# access
# select
# php
# ssl
# for
# mysql
# 开发环境
# pdo
# mysqli
# Resource
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- php能跑在stm32上吗_php在stm32微控
- Windows 11怎么设置默认解压软件_Wind
- Win11怎么更改管理员名字 Win11修改账户名
- c++的STL算法库find怎么用 在容器中查找指
- PHP 中如何在函数内持久化修改引用变量的指向
- Win11怎么更改鼠标指针_Windows 11自
- Win11如何设置文件关联 Win11修改特定文件
- Win11怎样彻底卸载自带应用_Win11彻底卸载
- Win11怎么设置默认终端应用_Windows11
- Linux怎么设置磁盘配额_Linux系统Quot
- Windows怎样拦截WPS弹窗广告_Window
- Win11怎么关闭通知消息_屏蔽Windows 1
- Go 中实现 Python urllib.quot
- Windows怎样关闭开始菜单推荐广告_Windo
- Win10路由器怎么隐藏ssid Win10隐藏w
- c++ try_emplace用法_c++ map
- MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第
- Windows10如何删除Windows.old_
- Python列表推导式与字典推导式教程_简化代码高
- PythonWeb前后端整合项目教程_FastAP
- 如何使用Golang指针与接口结合_实现方法调用和
- Win11怎么设置麦克风权限_允许应用访问Win1
- Windows10电脑怎么设置虚拟内存_Win10
- 如何在Golang中使用内置函数_Golangle
- C#如何使用XPathNavigator高效查询X
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- PHP的FastAdmin架构适合二次开发吗_特点
- 如何使用Golang实现多重错误处理_Golang
- Win11怎么关闭任务栏小图标_Windows11
- 如何在Golang中捕获结构体方法错误_Golan
- 手机php文件怎么变成mp4_安卓苹果打开php转
- 如何在Golang中验证模块完整性_Golangg
- Win10如何更改网络连接_Windows10以太
- 如何在Golang中实现CI/CD流水线自动化测试
- Win11怎么关闭定位服务 Win11禁止应用获取
- 如何诊断并终止卡死的 multiprocessin
- MAC怎么在照片中添加水印_MAC自带编辑工具文字
- PythonPandas数据分析项目教程_时间序列
- Windows10系统更新错误0x80070002
- Windows10电脑怎么设置防火墙出站规则_Wi
- VSC怎么在PHP中调试MySQL_数据库交互排查
- c++如何实现一个高性能的环形队列(Ring Bu
- 如何在Windows中创建新的用户账户?(标准与管
- 本地php环境出现502错误_nginx或apac
- Win11怎么设置右键刷新选项_Windows11
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- Win11时间格式怎么改成12小时制 Win11时
- 如何在Golang中修改数组元素_通过指针实现原地
- Win11如何关闭小娜Cortana Win11禁
- php增删改查需要哪些扩展_开启mysqli或pd


QQ客服