警告:mysqli::__construct(): (HY000/2002): [重复] 中没有这样的文件或目录

Posted

技术标签:

【中文标题】警告:mysqli::__construct(): (HY000/2002): [重复] 中没有这样的文件或目录【英文标题】:Warning: mysqli::__construct(): (HY000/2002): No such file or directory in [duplicate] 【发布时间】:2019-07-27 11:09:00 【问题描述】:

我花了几天时间试图弄清楚这一点……

我在运行 Mojave (10.14.3) 的 Mac OS 上设置了 Apache Web 服务器(版本 2.4.34),并安装了当前版本的 mysql Community Server (8.0.15)。两者都运行完美,我可以确定(从命令行)。我安装了 php 7.1.23。当我使用以下代码创建一个 .php 文件并将其放在我的站点目录中,然后在 Safari 中转到 http://localhost/~dave/hello.php 时,我收到此错误:

“警告:mysqli::__construct(): (HY000/2002): 没有这样的文件或 第 7 行 /Users/dave/Sites/hello.php 中的目录连接失败: 没有这样的文件或目录”。

hello.php 中的代码:

<?php
$servername = "localhost";
$username = "dave";
$password = "*****";

//Create connection
$conn = new mysqli($servername, $username, $password);

//Check connection
if ($conn->connect_error) 
   die("Connection failed: " . $conn->connect_error);

echo "Connected successfully";
?>

我已经尝试了我能想到的一切,包括其他两个类似帖子中的建议(这个:My database user exists, but I still get an (HY000/2002): No such file or directory 和这个:PHP Warning: mysqli::__construct(): (HY000/2002): No such file or directory (Debian GNU/Linux 9)),我无法使用 php 连接到 MySQl。特别是,我检查了 php 信息页面,mysqli 的套接字为var/mysql/mysql.sock。在 mysql 的相关表中,socket 的值为/tmp/mysql.sock。我尝试通过添加每个套接字(代替空值)来更改 php.ini.default 文件,但都没有工作(仍然产生相同的错误)。我认为 2002 MySQL 套接字错误可能是问题所在,所以我这样做了一个符号链接:

sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

但所做的只是产生一个新的错误:

警告:mysqli::__construct():服务器请求身份验证 客户端 [caching_sha2_password] 中未知的方法 /Users/dave/Sites/hello.php 在第 7 行

警告:mysqli::__construct(): (HY000/2054): 服务器请求 客户端未知的身份验证方法 第 7 行的 /Users/dave/Sites/hello.php 连接失败:服务器 客户端未知的请求身份验证方法

所以我删除了符号链接...并返回到原来的错误。

我还尝试将“localhost”替换为 IP 地址 127.0.0.1 以及“localhost:3306”,正如其他问题线程所建议的那样。这里也没有任何效果。

请帮忙,我对这种计算机/网页设计的使用不熟悉,而且我没有明显的(谷歌可搜索/可理解的)选项。

【问题讨论】:

您没有描述您在安装过程中采取的步骤。说“我已经安装了 Apache 和 Mysql”是一回事。但是有多种安装和配置方法,所以你需要描述你的精确步骤,这样我们才能看到你哪里出错了。另外你为什么要安装它们?为什么不直接使用 MAMP?您是否也搜索过 *** / Google 以查找该错误?例如。 ***.com/questions/13769504/…。您提到“另外两个类似的帖子”,但您没有链接到它们。如果你这样做会有所帮助。 您如何验证 MySQL 确实在运行并接受连接?它接受套接字连接吗?您是在 docker 容器内运行东西还是在同一主机上运行所有东西? @geoidesic:我会尽量准确回答。 Apache:实际上,我认为升级到 Mojave 时已经安装了 Apache 和 php。然后,我根据discussions.apple.com/docs/DOC-13841和dyclas-s-room.com/howto-mac/…设置了Apache。 mysql。我下载了 .dmg 压缩文件夹并按照 MySQL 用户手册说明进行安装。我检查了服务器是否在 Mac 首选项中运行,然后可以从命令行使用 mysql,按照教程进行操作没问题。我也可以 LOAD DATA LOCAL INFILE OK。 @ArSeN。我不明白你的问题抱歉,这里是新手。 在你的 php 文件中创建一个phpinfo() 并显示 MySQL 和 MySQLi 块的内容。 【参考方案1】:

使用 127.0.0.1 代替 localhost。

【讨论】:

在devilbox上为我工作,而'localhost'却不行。 这里也一样,在用 php -m 检查是否安装了 mysqli 后一直在闲逛一段时间。将我的主机名 localhost 更改为 127.0.0.1 并且它有效。 通过将主机名“localhost”更改为“127.0.0.1”也适用于我。你能解释一下为什么使用 127.0.0.1 而不是 localhost 吗? 在这里找到了我自己的问题的答案:***.com/questions/31413728/…。在我的情况下,PHP mysqli.default_socket 指令似乎指向 MySQL 服务器的错误 mysql.sock 套接字文件位置。更改 php.ini 文件中的 mysqli.default_socket 指令或更改 my.cnf 文件中的 MySQL 套接字配置,或者创建指向 php.ini 中指定的正确 MySQL 套接字文件的符号链接。【参考方案2】:

我从我所在地区的一些本地技术人员那里得到了一些帮助,结果发现修复套接字错误是第一步,就像我在上面尝试做的那样。我最终这样做了,使用名词的解决方案:

Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in

然后生成第二条错误消息(与我的问题中的相同,再次出现):

mysqli::__construct():服务器请求的身份验证方法未知客户端 [caching_sha2_password] 在 /Users/dave/Sites/hello.php 的第 7 行

警告:mysqli::__construct(): (HY000/2054): 服务器在第 7 行的 /Users/dave/Sites/hello.php 中请求客户端未知的身份验证方法

此问题的基于 SQL 的解决方案(2018 年 6 月 9 日的答案)已解决此问题:

php mysqli_connect: authentication method unknown to the client [caching_sha2_password]

这条 SQL 语句只是从终端在 MySQL 中运行的。重新启动 Apache 服务器后,我在 Safari 中重新加载了 .php 文件,这导致 mysqli 使用 PHP 成功连接到 MySQL。我还尝试了 PDO 连接,这也有效。

【讨论】:

如果这是解决方案,请随意将您自己的答案标记为“已接受”。

以上是关于警告:mysqli::__construct(): (HY000/2002): [重复] 中没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

警告:mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: No such host is known [重复]

php警告:访问被拒绝[重复]

kali配置phpmyadmin报错mysqli::__construct(): (HY000/1698): Access denied for user 'root'@'lo

警告:PDO::__construct(): [2002] 没有这样的文件或目录(试图通过 unix:///tmp/mysql.sock 连接)

php的mysqlmysqliPDOmysqli

MYSQLI - mysqli操作数据库