为什么PHP网站本地运行正常,部署到AWS云后MySQLi数据库连接失败?
两个数据库连接命令的核心区别
你提到的new mysqlit为笔误,正确写法是new mysqli,二者底层实现完全一致,仅调用风格和默认错误处理逻辑有差异:
- 调用范式不同:
mysqli_connect($server, $user, $pass, $database)是过程化写法,连接失败时直接返回false,同时触发PHP警告;new mysqli($server, $user, $pass, $database)是面向对象写法,连接失败时仍会返回mysqli实例对象,不会主动抛出错误,需要通过$conn->connect_error属性自行判断连接状态。 - 运行表现差异对应你遇到的现象:如果AWS环境开启了错误拦截,过程化写法触发的警告会直接中断页面渲染,导致无法正常运行;面向对象写法因未主动暴露连接错误,代码可继续执行,所以页面能正常访问但所有数据库相关操作失效。
本地正常、AWS远程异常的常见原因
- 数据库权限与安全组限制:本地数据库一般默认允许本地IP访问,AWS云数据库(如RDS)默认会通过安全组限制访问源,需要在数据库安全组中放行应用服务所在EC2/ECS实例的IP,同时确认数据库账号是否允许对应IP段访问。
- 连接参数不匹配:本地环境
$server一般为127.0.0.1或localhost,AWS环境需要填写云数据库的内网/公网访问端点,需确认地址、端口、账号密码、库名配置是否正确,是否存在硬编码本地配置未适配云环境的问题。 - PHP环境配置差异:本地PHP默认开启了mysqli扩展,AWS部署的PHP环境可能未启用mysqli扩展,可通过
phpinfo()函数确认扩展状态。 - 网络连通性限制:AWS VPC默认会拦截未放行的端口请求,需确认应用服务到数据库的3306端口是否已在VPC网络ACL、安全组规则中放行,可通过
telnet 数据库地址 3306命令测试连通性。
内容的提问来源于stack exchange,提问作者Pawli
相关产品推荐
相关产品推荐

