核心原因是PHP 8.2未加载mysqli和pdo_mysql扩展,且localhost解析机制变化导致连接失败;需取消php.ini中对应扩展注释、将host改为127.0.0.1或指定socket路径,并确认MAMP加载的是PHP 8.2专属配置文件。

MAMP 7.0 搭配 PHP 8.2 无法连接数据库,核心原因不是“连不上 MySQL”,而是PHP 8.2 根本没加载 MySQL 驱动——即使 MySQL 服务正常运行、账号密码全对,也会报 could not find driver 或 “无法建立数据库连接”。这不是配置错误,是环境缺模块。
PHP 8.2 默认不带 MySQL 扩展
MAMP 7.0 虽然集成了 PHP 8.2,但它的默认 php.ini 并未启用 mysqli 和 PDO MySQL 扩展。PHP 8.2 已彻底移除旧的 mysql 扩展,只支持 mysqli 和 pdo_mysql,而这两个必须手动开启。
- 打开 MAMP → Preferences → PHP → “Edit template”(或直接找到
/Applications/MAMP/bin/php/php8.2.*/conf/php.ini) - 搜索
;extension=mysqli和;extension=pdo_mysql,删掉前面的分号取消注释 - Windows 下注意扩展名是
.dll,macOS/Linux 是.so,路径通常已预设正确 - 保存后重启 MAMP 的服务器
MySQLi 连接行为在 PHP 8.2 中有变化
PHP 8.2 对 localhost 的解析更严格:它默认走 TCP,不再自动 fallback 到 Unix socket。而 MAMP 的 MySQL 实际使用的是本地 socket 文件(如 /Applications/MAMP/tmp/mysql/mysql.sock),用 localhost 反而可能失败。
- 把代码里的
$host = 'localhost'改成$host = '127.0.0.1',强制走 TCP 协议 - 或者保留
localhost,但显式指定 socket:new mysqli('localhost', $u, $p, $db, 3306, '/Applications/MAMP/tmp/mysql/mysql.sock') - 检查
phpinfo()页面中 “mysqli.default_socket” 的值是否匹配 MAMP 实际 socket 路径
MAMP 多版本共存导致 php.ini 错配
MAMP 7.0 支持切换多个 PHP 版本,但它每次启动时加载的 php.ini 是“当前选中版本”的配置文件。如果你在界面里切过 PHP 版本(比如试过 8.1),再切回 8.2,可能实际加载的仍是旧版 php.ini —— 里面没有为 8.2 启用扩展。
立即学习“PHP免费学习笔记(深入)”;
- 访问
http://localhost:8888/MAMP/→ 点击 “PHP Info”,确认顶部显示的 PHP 版本和 “Loaded Configuration File” 路径是否一致且指向 8.2 目录 - 若路径不对,手动编辑对应版本的 php.ini(别改错目录),或重置 MAMP 的 PHP 版本选择
- 运行
php -m | grep -E "(mysqli|pdo_mysql)"(终端进入 MAMP 的 PHP 8.2 bin 目录下执行)验证扩展是否真被加载
WordPress 或框架额外卡点
如果你是在装 WordPress 或 Laravel 等框架时卡在数据库页,还要排除框架自身干扰:
- WordPress 安装前会尝试用 PDO 连接,确保
pdo_mysql已启用(仅开 mysqli 不够) - Laravel 的
.env中DB_HOST=localhost要同步改成127.0.0.1 - 某些框架缓存了数据库配置,改完 php.ini 后清空 Laravel 的
bootstrap/cache/config.php或运行php artisan config:clear



















