Skip to content

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

无论是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连接数据库时,通常都包括数据库名称,这样可以确保连接的指定的数据库。

原文链接:https://blog.csdn.net/youcijibi/article/details/103460899