Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 警告:mysqli_connect():(HY000/2002):没有这样的文件或目录_Php_Mysql_Mysqli - Fatal编程技术网

Php 警告:mysqli_connect():(HY000/2002):没有这样的文件或目录

Php 警告:mysqli_connect():(HY000/2002):没有这样的文件或目录,php,mysql,mysqli,Php,Mysql,Mysqli,我正试图在Mac上安装vanilla论坛,为此,我刚刚从MySQL命令行创建了一个数据库和一个用户: mysql> CREATE DATABASE vanilla; Query OK, 1 row affected (0.00 sec) mysql> create user 'vanilla_user3'@'localhost' IDENTIFIED BY 'vanilla_password'; Query OK, 0 rows affected (0.00 sec) mysql

我正试图在Mac上安装vanilla论坛,为此,我刚刚从MySQL命令行创建了一个数据库和一个用户:

mysql> CREATE DATABASE vanilla;
Query OK, 1 row affected (0.00 sec)

mysql> create user 'vanilla_user3'@'localhost' IDENTIFIED BY 'vanilla_password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'vanilla_user3'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
因此,我尝试使用以下代码进行连接:

$con=mysqli_connect("localhost","vanilla_user3","vanilla_password","vanilla");
if (mysqli_connect_errno($con)) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
但不幸的是,我在说

警告:mysqli_connect():(HY000/2002):第3行的/Users/kramer65/Sites/vanilla/info.php中没有此类文件或目录 连接MySQL失败:没有这样的文件或目录


知道我哪里出错了吗?

好吧,我刚刚找到了解决办法。问题是主机不应该是
localhost
,而是
127.0.0.1
。我一直认为
localhost
127.0.0.1
是一样的,但结果是不同的


因此,作为未来用户的提示,在有疑问时始终使用ip。

我也有同样的问题,但问题与
php.ini
文件有关

我不得不在
/etc/php.ini
中编辑这两行(或者在
php.ini
所在的任何地方):

重新启动apache服务器以确保反映更改

sudo apachectl restart

假设您的MAMP MySQL端口设置为8889,与默认设置相同。有时单独使用
localhost
是不够的,在这种情况下,您必须将MySQL端口也放在那里,这样您就可以执行
localhost:8889
localhost:{无论您的MySQL端口号是什么}
。我还是MySQL新手,所以我不知道原因,但对于最近收到消息的任何人来说:
警告:mysqli::mysqli():(HY000/2002):在…
中没有这样的文件或目录。将MySQL端口号添加到本地主机是我的解决办法。

在主机中设置端口:

$con = mysqli_connect("localhost:**3306**","vanilla_user3","vanilla_password","vanilla");

如果使用docker,请使用mysql容器名称作为mysql的主机名。例如,如果这是docker compose文件:

mysqldb:
    image: mysql:5.7.22
    container_name: mysqlHost
    ports:
        - "33099:3306"
主机名将是
mysqlHost
,端口将是
3306
,而不是
33099


如果未使用docker compose,
docker ps
将显示正在运行的容器名称。

/opt/lampp/etc/
中查找
php.ini
文件 然后编辑:

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

之后,在DB connect文件中,将本地主机更改为
127.0.0.1
。一切都会好起来的。但是,如果尝试使用
config.inc.php
文件,请确保其全部设置为
127.0.0.1
,而不是本地主机。

mohitmayank的回答是正确的。如果
localhost
不起作用,您需要告诉PHP在哪里可以找到您的mysql套接字文件。请参阅我对2016年11月21日Adam回答的评论类似的问题,但更简单:mysql不启动可能会导致相同的错误。客户端的服务器已经几个月没有重新启动了,在重新启动后mysql没有运行,也没有人想检查。太担心所有的代码库和“谁造成了这个bug”。LOL(只是因为Apache已经启动了,你可以把SSH放到服务器上,这也不能保证MySQL也起了作用)@ StaskNo骑士我也观察到同样的错误,就像几个月内一样,这似乎与你所说的有关,因为MySQL服务器在那个时候暂时不可用。localhost确实需要在$host参数中添加端口(即使默认值为3306),但其他主机名不需要。因此,您将使用“localhost:3306”作为$host参数。其他主机名和IP地址将使用$port参数。但如果$host是“localhost”,则忽略$port参数。我相信这个问题可以追溯到PHPdoc for__construct()中的某个地方:“如果可能,将使用管道代替TCP/IP协议”。这是使用套接字代替TCP/IP的正确答案。mysql.sock位于/var/run/mysqld/mysqld.sock for me‘使用这里针对Mac用户的说明进行后续操作
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock