PHP 连本机 MySQL 需确保服务运行、权限正确、连接参数匹配;localhost 默认走 socket,127.0.0.1 强制 TCP;推荐显式用 PDO 连 127.0.0.1:3306,并检查扩展启用与用户授权。

PHP 能连上本机 MySQL,前提是 MySQL 服务在运行、用户权限正确、连接参数匹配——不是改个 host 就能通的。
确认 MySQL 服务是否真在本地运行
很多人以为 localhost 就一定通,其实它背后可能走 socket(Unix domain socket)或 TCP,而 PHP 默认行为取决于配置和系统环境。
- Linux/macOS 下运行
sudo systemctl status mysql或brew services list | grep mysql确认服务已启动 - Windows 下检查「服务」里是否有
MySQL80或类似名称的服务,状态为「正在运行」 - 终端执行
mysql -u root -p能登录,说明 MySQL 本身没问题;如果报Can't connect to local MySQL server through socket,大概率是 socket 路径不一致或 mysqld 没启
PHP 连接时用 localhost 还是 127.0.0.1?
这是最常踩的坑:localhost 在 PHP 的 mysqli 或 PDO 中默认触发 Unix socket 连接(跳过 TCP),而 127.0.0.1 强制走 TCP。如果你的 MySQL 配置禁用了 socket(比如某些 Docker 容器或自编译安装),用 localhost 就会连不上。
- 优先试
127.0.0.1:更稳定,不受 socket 路径影响 - 如果必须用
localhost,确保my.cnf里有socket = /var/run/mysqld/mysqld.sock(路径需与 PHP 的mysqli.default_socket或PDO::MYSQL_ATTR_UNIX_SOCKET一致) - 查 PHP 当前 socket 默认值:
php -i | grep default_socket
PHP 代码里怎么写才可靠?
别只抄网上的“一行示例”,要带错误处理和参数显式声明。
微信分销商城电脑手机三合一是以php+MySQL进行开发的微信商城分销系统源码。安装步骤:1、打开:网址/diguo/index.php 用户密码是admin 123456 登录进去配置数据库信息。2、用帝国还原恢复数据库.3、修改data文件夹里的config.php (data/config.php)数据库配置信息4、登录网站后台,网址:域名/admin/index.php 后台帐号是:
立即学习“PHP免费学习笔记(深入)”;
// 推荐用 PDO,显式指定 host 和端口
try {
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8mb4', 'root', 'your_password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
} catch (PDOException $e) {
die('Connection failed: ' . $e->getMessage());
}
- 明确写
host=127.0.0.1,不依赖解析或 socket -
port=3306显式写出,避免被配置覆盖 - 密码为空时传空字符串
'',不是null或省略 - MySQL 8+ 默认用
caching_sha2_password插件,PHP 7.4+ 才原生支持;老版本 PHP 可临时改用户认证方式:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
检查 PHP 是否启用了 MySQL 扩展
连不上不一定是地址或密码错,可能是 PHP 根本没加载扩展。
- 运行
php -m | grep mysqli或php -m | grep pdo_mysql,没输出就说明没启用 - Linux Apache 环境:确认
/etc/php/*/apache2/conf.d/20-mysqli.ini存在且未被注释 - CLI 模式和 Web 模式可能用不同 php.ini,分别用
php --ini和phpinfo()查 - 常见错误信息如
Class 'mysqli' not found或Driver not found都指向扩展缺失
真正卡住的地方往往不在代码,而在 MySQL 用户权限绑定的是 'root'@'localhost' 还是 'root'@'127.0.0.1'——这两个在 MySQL 里是两个不同的账号,授权得分开做。另外,防火墙一般不影响本机连接,但某些安全软件会拦截 loopback 流量,遇到诡异超时可以临时禁用试试。










