警告:mysqli :: __ construct():(HY000 / 2002):

时间:2019-03-05 21:39:10

标签: php mysql mysqli

我花了几天的时间才试图解决这个问题……

我已经在运行Mojave(10.14.3)的Mac OS上安装了Apache Web服务器(版本2.4.34),并安装了当前版本的MySQL Community Server(8.0.15)。正如我所能确定的(从命令行),两者都运行良好。我已经安装了PHP 7.1.23。当我使用以下代码创建.php文件并将其放在我的Sites目录中,然后在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的相关表中,套接字的值为/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]中未知的方法   第7行的/Users/dave/Sites/hello.php

     

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

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

我还尝试用IP地址127.0.0.1以及其他问题线程建议的“ localhost:3306”替换“ localhost”。这里也没有任何作用。

请帮助,我对这种计算机/网页设计的使用还是陌生的,并且没有明显的(谷歌/可理解的)选项。

2 个答案:

答案 0 :(得分:2)

使用127.0.0.1代替本地主机。

答案 1 :(得分:0)

我从我所在地区的一些本地技术人员那里得到了一些帮助,事实证明,解决套接字错误是第一步,就像我在上面尝试过的那样。我最终以这种方式使用名词的解决方案做到了这一点:

https://reactjs.org/docs/refs-and-the-dom.html

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

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

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

此问题通过基于SQL的解决方案(2018年6月9日回答)得到解决:

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

此SQL语句仅在终端中的MySQL中运行。重新启动Apache服务器后,我在Safari中重新加载了.php文件,这导致通过PHP与MySQL的mysqli成功连接。我还尝试了PDO连接,这也有效。