php 7.4 中 mysqli 连接指定端口必须将整数端口作为第 5 参数传入,host 必须用 127.0.0.1(非 localhost)以强制走 tcp,字符串端口如 "3307" 会静默失败,localhost:3307 写法因走 socket 而忽略端口。

PHP 7.4 用 mysqli 连指定主机和端口,关键不是拼字符串,而是把端口作为独立参数传——否则 localhost:3307 这种写法在 Linux 下大概率走 socket 而非 TCP,端口被忽略。
mysqli 构造函数必须显式传整数端口
new mysqli() 的第 4 个参数是数据库名,第 5 个才是端口($port),且必须是整数类型。如果省略第 5 个参数,它不会自动从 host 字符串里解析端口。
-
$host必须用127.0.0.1(而非localhost),才能强制走 TCP 协议,让端口生效 -
$port值不能是字符串,比如"3307"会静默失败;必须写成3307 - 如果同时要指定 socket 文件(如
/tmp/mysql.sock),就不能靠第 5 个参数传端口,得改用mysqli_real_connect()或换 PDO
常见错误:localhost + 端口号字符串 = 白连
这种写法一定失败:new mysqli("localhost:3307", $user, $pass, $db)。因为 mysqli 把整个 "localhost:3307" 当作主机名,然后尝试走本地 socket,根本不会连 3307 端口。
- Linux/macOS 下
localhost默认触发 socket 连接,端口参数被绕过 - 即使你写了第 5 个参数,但 host 还是
localhost,部分环境仍可能优先选 socket - Docker 容器内或远程部署时,
127.0.0.1比localhost更可靠、行为更一致
面向过程写法:mysqli_connect() 参数顺序一样
mysqli_connect() 和构造函数参数顺序完全一致:host、user、pass、db、port(可选)。第 5 个参数也是端口,也必须是整数。
- 示例:
$conn = mysqli_connect("127.0.0.1", "root", "pass", "test", 3307); - 连接失败时,用
mysqli_connect_error()拿错误信息,而不是只看返回值是否 false - PHP 7.4 已废弃
mysql_*函数,别再用mysql_connect("host:port")这类写法
端口不是装饰性参数,它是连接路径的开关——用错 host 或类型不对,TCP 就打不开,报错通常是 Connection refused 或 Can't connect to MySQL server,而不是认证失败。真正要盯住的,是 host 值和 port 类型这两个点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











