php数据库怎么进localhost的mysql_php连本机mysql步骤【步骤】

11次阅读

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

php数据库怎么进localhost的mysql_php连本机mysql步骤【步骤】

PHP 能连上本机 MySQL,前提是 MySQL 服务在运行、用户权限正确、连接参数匹配——不是改个 host 就能通的。

确认 MySQL 服务是否真在本地运行

很多人以为 localhost 就一定通,其实它背后可能走 socket(unix domain socket)或 TCP,而 PHP 默认行为取决于配置和系统环境。

  • linux/macOS 下运行 sudo systemctl status mysqlbrew 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 的 mysqliPDO 中默认触发 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_socketPDO::MYSQL_ATTR_UNIX_SOCKET 一致)
  • 查 PHP 当前 socket 默认值:php -i | grep default_socket

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 mysqliphp -m | grep pdo_mysql,没输出就说明没启用
  • Linux apache 环境:确认 /etc/php/*/apache2/conf.d/20-mysqli.ini 存在且未被注释
  • CLI 模式和 Web 模式可能用不同 php.ini,分别用 php --iniphpinfo()
  • 常见错误信息如 class 'mysqli' not foundDriver not found 都指向扩展缺失

真正卡住的地方往往不在代码,而在 MySQL 用户权限绑定的是 'root'@'localhost' 还是 'root'@'127.0.0.1'——这两个在 MySQL 里是两个不同的账号,授权得分开做。另外,防火墙一般不影响本机连接,但某些安全软件会拦截 loopback 流量,遇到诡异超时可以临时禁用试试。

text=ZqhQzanResources