php连接远程mysql需四步:①目标库bind-address=0.0.0.0并重启服务;②创建'user'@'%'用户并授权;③开放服务器3306端口及云平台安全组;④php中host写ip而非localhost,pdo需在dsn中显式指定charset和port。

phpEnv 本身不提供数据库服务,它只是 Windows 下的 PHP 集成环境(类似 XAMPP),默认 MySQL 绑定在 127.0.0.1,只接受本地连接。想让它连「外部」MySQL(比如 GCP、阿里云、自己另一台服务器上的 MySQL),关键不是改 phpEnv,而是确认目标库是否允许你连、网络是否通、权限是否开——PHP 代码只是最后一步。
远程 MySQL 连不上?先查 Connection refused 还是 Host 'xxx' is not allowed to connect
这两个错误指向完全不同的层级:
-
Connection refused:网络不通。可能是目标服务器防火墙/安全组没放行3306端口,或 MySQL 根本没监听外部地址(bind-address = 127.0.0.1)。 -
Host 'xxx' is not allowed to connect:网络通了,但 MySQL 用户没授权。默认用户(如root@localhost)不能从远程 IP 登录,必须显式创建'user'@'%'或'user'@'your-phpenv-ip'并GRANT权限。
用命令快速验证网络层:telnet your-remote-ip 3306(Windows)或 nc -zv your-remote-ip 3306(Linux/macOS)。不通就别写 PHP 了。
mysqli_connect() 连远程库时,host 参数不能写 localhost
这是最常踩的坑:localhost 在 MySQL 客户端中是特殊关键字,强制走 Unix socket(即使你在 Windows 上也触发兼容逻辑),根本不会发 TCP 请求。结果就是“明明 IP 没错却连不上”,报错还很模糊。
- ✅ 正确写法:
mysqli_connect('192.168.1.100', 'user', 'pass', 'db', 3306)或mysqli_connect('db.example.com', ...) - ❌ 错误写法:
mysqli_connect('localhost', ...)—— 即使远程库装在同一台物理机上,只要不是通过 socket 访问,就不能这么写。 - ⚠️ 补充:如果远程库监听的是非默认端口(比如
3307),mysqli_connect()的第 5 个参数必须显式传入,漏掉就会超时失败。
PDO DSN 中 host 和 port 都得写全,charset 必须放在 DSN 里
PDO 没有 mysqli 那种“端口默认 fallback”机制,DSN 字符串必须完整。而且字符集设置非常容易被忽略:如果只在连接后调 $pdo->exec("SET NAMES utf8mb4"),某些特殊字段(比如 emoji)仍可能乱码。
- ✅ 推荐 DSN:
mysql:host=192.168.1.100;port=3306;dbname=mydb;charset=utf8mb4 - ❌ 无效写法:
mysql:host=192.168.1.100;dbname=mydb(缺charset,且没指定port,万一远程改过端口就静默失败) - ⚠️ 注意:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION必须设,否则 SQL 报错只会返回false,不抛异常,调试时像在盲找。
云服务器(GCP/阿里云/腾讯云)连不上?安全组比 MySQL 配置还优先
很多用户改完了 bind-address、加了用户、开了 ufw,还是连不上——因为云平台的安全组规则是第一道网关,默认拒绝所有入向流量。MySQL 的 3306 端口不在白名单里,包根本到不了系统防火墙那层。
- GCP:进「VPC 网络 → 防火墙」,新建规则,目标为你的实例,源 IP 建议填你本地公网 IP/
32(测试期可暂用0.0.0.0/0),协议选tcp:3306。 - 阿里云/腾讯云:对应控制台找「安全组」→「入方向规则」→ 添加
3306TCP 端口,授权对象填你本地 IP。 - ⚠️ 关键点:安全组规则生效是秒级的,但 MySQL 配置修改后必须重启服务(
sudo systemctl restart mysql),这两步缺一不可。
真正卡住的地方往往不在 PHP 代码里,而在网络路径和权限策略的交叉点上。把 telnet、bind-address、用户 @'%' 授权、安全组这四件事逐个确认清楚,剩下的就是写几行连接代码的事了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











