You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP PDO连接MariaDB在LAMPP环境报SQLSTATE[HY000][2002]错误

解决LAMPP环境下PDO连接MariaDB报SQLSTATE[HY000] [2002]错误

问题分析

你在PhpStorm中能正常连接数据库,但LAMPP环境下触发No such file or directory异常,核心矛盾点在于:虽然指定了host=127.0.0.1(TCP连接模式),但PDO仍尝试通过套接字连接,或套接字文件本身存在权限/路径问题。

解决方案

1. 确认LAMPP的MariaDB服务已启动

LAMPP的数据库服务可能未正常运行,先检查状态:

sudo /opt/lampp/bin/mysql.server status

如果显示STOPPED,启动服务:

sudo /opt/lampp/bin/mysql.server start

也可以通过图形化控制面板管理服务:

sudo /opt/lampp/manager-linux-x64.run

2. 验证套接字文件的存在与权限

报错提示套接字找不到,先确认文件是否存在:

ls -l /opt/lampp/var/mysql/mysql.sock
  • 如果文件不存在:重启MariaDB服务会自动生成该文件
  • 如果文件存在:检查Apache运行用户(www-data)是否有访问权限
# 修正套接字文件的所属组和权限
sudo chown mysql:mysql /opt/lampp/var/mysql/mysql.sock
sudo chmod 770 /opt/lampp/var/mysql/mysql.sock
# 将www-data用户加入mysql组,获取访问权限
sudo usermod -aG mysql www-data

3. 移除PDO DSN中的unix_socket参数(关键操作)

当指定host=127.0.0.1时,PDO会强制使用TCP连接,此时unix_socket参数会造成冲突,导致PDO错误地尝试套接字连接。修改DatabaseManager.php:

function create_connection_to_db() : PDO {
    global $host, $port, $dbname, $user, $password;
    // 移除unix_socket参数,让PDO走TCP连接
    return new PDO("mysql:host={$host};port=$port;dbname={$dbname}", $user, $password);
}

4. 确认PHP配置生效并重启Apache

修改php.ini后必须重启Apache才能让配置生效:

sudo /opt/lampp/apachectl restart

新建phpinfo.php文件验证配置:

<?php phpinfo(); ?>

访问该文件后,搜索pdo_mysql.default_socket,确认路径为/opt/lampp/var/mysql/mysql.sock。

5. 测试TCP连接可用性

用LAMPP自带的MySQL客户端测试TCP连接是否正常:

/opt/lampp/bin/mysql -h 127.0.0.1 -P 3306 -u root -p

输入密码(你的配置为空,直接回车),如果能正常登录,说明TCP连接没问题;如果连不上,检查端口监听状态:

netstat -tulpn | grep 3306

确认输出中有mysqld进程监听127.0.0.1:3306。


内容的提问来源于stack exchange,提问作者JCGdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:52:12