php 7.2 连接 xampp mysql 最常卡在 root 密码为空却误填、host 用 localhost 触发 socket 路径不一致、mysql_* 函数已移除,应改用 mysqli('127.0.0.1', 'root', '', 'db') 或 pdo('mysql:host=127.0.0.1;dbname=db;charset=utf8mb4', 'root', '')。

PHP 7.2 能直接用 mysqli 或 PDO 连 XAMPP 自带的 MySQL,但默认 root 密码为空、socket 路径可能不一致、mysql_* 函数已彻底移除——这是最常卡住的地方。
确认 MySQL 服务已启动且 root 密码为空
XAMPP 控制面板里 Apache 和 MySQL 都显示绿色 “Running” 才算真正就绪。MySQL 默认用户名是 root,密码为空(不是 "" 字符串,而是留空),很多新手填了 "root" 或 "" 都连不上。
- 在终端执行
/opt/lampp/bin/mysql -u root(Linux)或C:\xampp\mysql\bin\mysql.exe -u root(Windows),回车后若直接进入 MySQL 提示符mysql>,说明密码确实为空 - 如果提示
Access denied,说明密码被改过;可临时重置:停止 MySQL → 用--skip-grant-tables启动 → 手动更新mysql.user表 - 不要在代码里写
password: "root"或password: ""—— 留空即可,即'password' => ''
用 mysqli 连接时必须指定 host 和 port
PHP 7.2 已完全移除 mysql_connect(),只能用 mysqli 或 PDO。XAMPP 的 MySQL 默认监听 127.0.0.1:3306,但如果你用 localhost 作 host,PHP 会尝试走 Unix socket(Linux/macOS)或命名管道(Windows),而 XAMPP 的 socket 路径往往和系统默认不一致,导致连接失败。
- 安全写法是显式指定 TCP 连接:
$conn = new mysqli('127.0.0.1', 'root', '', 'test'); - 避免用
'localhost',它在 PHP 中触发 socket 模式;用'127.0.0.1'强制走 TCP - 端口不一定要写(默认 3306),但显式写出更清晰:
new mysqli('127.0.0.1', 'root', '', 'test', 3306) - 连接后务必检查:
if ($conn->connect_error) die("Connect failed: " . $conn->connect_error);
PDO 连接字符串要避开 socket 自动解析
PDO 对 localhost 同样敏感,而且错误信息更模糊。直接写 mysql:host=localhost;dbname=test 很可能报 SQLSTATE[HY000] [2002] No such file or directory —— 这其实是 socket 文件找不到,不是数据库没开。
- 正确写法:
$dsn = 'mysql:host=127.0.0.1;dbname=test;charset=utf8mb4'; - 必须加
charset=utf8mb4,否则中文可能乱码(XAMPP 7.2+ 默认用 utf8mb4) - 创建 PDO 实例时捕获异常:
try { $pdo = new PDO($dsn, 'root', ''); } catch (PDOException $e) { echo $e->getMessage(); } - 别用
mysql:host=localhost,哪怕你只在本地开发——它不可靠
验证连接前先关掉 display_errors 的干扰
PHP 7.2 默认关闭错误显示,但 XAMPP 的 php.ini 可能仍设为 display_errors = Off,导致连接失败时页面空白,看不出问题在哪。
- 打开
/opt/lampp/etc/php.ini(Linux)或C:\xampp\php\php.ini(Windows) - 搜索
display_errors,设为On;再搜error_reporting,设为E_ALL - 改完重启 Apache,否则不生效
- 上线前务必改回
Off,避免泄露敏感信息
最容易被忽略的是 host 写成 localhost 导致的静默失败,以及 root 密码误以为是 "root"。XAMPP 的 MySQL 就是裸奔状态,连不上八成是连接参数绕进了 socket 陷阱,而不是权限或服务问题。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











