数据库连接报错:SQLSTATE[HY000] [2002] No such file or directory

每日总结 同时被 3 个专栏收录
400 篇文章 2 订阅
43 篇文章 1 订阅
231 篇文章 0 订阅

无论是pdo还是mysqli

出现这个问题的原因是php操作mysql无法找到mysql.sock或者mysqld.sock,这根据你的mysql配置文件而定,比如

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock

那么就是mysql.sock 。

    解决方法1:找到相应的.sock文件,并设置php.ini文件中的pdo_mysql.default_socket的值为.sock文件的路径。

pdo_mysql.default_socket= /usr/local/mysql/mysql.sock

mysqli.default_socket =/usr/local/mysql/mysql.sock

 

然后重启Apache,或者nginx下重启php-fpm即可。

    解决方法2:(我是用这种方法解决,简单省力)

    将PDO连接中的dsn的host由“localhost”改为“127.0.0.1”即可

    <?php
        header("Content-Type=text/html;charset=utf8");
        $dbType   = 'mysql';
        $host     = '127.0.0.1'; //此处不用localhost
        $dbName   = 'test';
        $userName = 'root';
        $pwd      = '';
     
        $dsn = "$dbType:host=$host;dbname=$dbName";
        try {
            $pdo = new PDO($dsn, $userName, $pwd);
            echo '连接成功';
        } catch (PDOException $e) {
            echo '连接失败:' . $e->getMessage();
        }
    ?>

 

DSN详解
    DSN是Data Source Name(数据源名称)的首字母缩写。DSN提供连接数据库需要的信息。PDO的DSN包括3部分:PDO驱动名称(如:mysql、sqlite或者pgsql)、冒号和驱动特定的语法。每种数据库都有其特定的驱动语法。
    实际中有一些数据库服务器可能与web服务器不在同一台计算机上,则需要修改DSN中的主机名称。
由于数据库服务器只在特定的端口上监听连接请求,故每种数据库服务器具有一个默认的端口号(MySQL是3306),但是数据库管理员可以对端口号进行修改,因此有可能PHP找不到数据库的端口号,此时就可以在DSN中包含端口号。
例如:

$dsn="mysql:host=127.0.0.1;port=3306;dbname=test";

由于一个数据库服务器中可能拥有多个数据库,所以在通过DSN连接数据库时,通常都包括数据库名称,这样可以确保连接的指定的数据库。
 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值