PHP连接MySQL不涉及跨域,跨域仅存在于前端JavaScript调用PHP接口时;需在PHP中设置Access-Control-Allow-Origin等响应头解决CORS错误。
“PHP 跨域连 MySQL”这个说法存在概念混淆。PHP 是服务端语言,mysqli_connect() 或 PDO 连接 MySQL 时走的是服务器内部网络(如 127.0.0.1、localhost 或内网 IP),和浏览器的“跨域(CORS)”完全无关。真正触发跨域的是前端 JavaScript 发起的 HTTP 请求(比如 fetch 调用 PHP 接口),而不是 PHP 自己连数据库。
这是实际中最常被误认为“PHP 跨域连 MySQL”的场景:前端页面在 http://a.com,调用 http://b.com/api.php,后者查 MySQL 并返回 JSON,但浏览器报 Access-Control-Allow-Origin 错误。
header('Access-Control-Allow-Origin: *');(生产环境建议指定域名,如 http://a.com)header('Access-Control-Allow-Credentials: true');,且前端 fetch 要加 credentials: 'include'
如果真要让 PHP 从一台服务器连另一台服务器上的 MySQL(例如 PHP 在腾讯云,MySQL 在阿里云),那不是跨域,而是网络与权限问题:
CREATE USER 'user'@'%' IDENTIFIED 
BY 'pass'; GRANT ALL ON db.* TO 'user'@'%'; FLUSH PRIVILEGES;
127.0.0.1(查看 bind-address 是否为 0.0.0.0 或注释掉)3306 端口(注意:不是 PHP 所在机器的防火墙,是 MySQL 服务器的)localhost —— 这会走 socket 连接,改用 127.0.0.1 或真实 IP 才走 TCP有人想绕过 PHP,用 JS 直连 MySQL(比如通过 WebSocket 或第三方库),这绝对不可行:
caching_sha2_password),纯 JS 客户端基本不支持真正的边界很清晰:浏览器 ↔ PHP(HTTP 接口,可配 CORS),PHP ↔ MySQL(内网直连,无需跨域)。把权限控制、连接复用、错误隔离这些事留在 PHP 层,别试图在前端碰数据库连接细节。