Php MySQL使用127.0.0.1,但不使用localhost?

Php MySQL使用127.0.0.1,但不使用localhost?,php,mysql,windows-7,Php,Mysql,Windows 7,我在php MySQL中遇到了一个奇怪的问题: php连接到127.0.0.1,但不连接到localhost 如何解决这个问题?必须在您的主机文件中定义localhost,在Windows和大多数OSs上默认为localhost 检查以下文本文件,看看有什么问题: C:\WINDOWS\system32\drivers\etc\hosts 请注意,“主机”是文件,没有扩展名,不是文件夹。这个文件应该是非常空的,如果你看到条目,或者你的AV/垃圾邮件拦截程序添加了大量指向127.0.0.1的条目

我在php MySQL中遇到了一个奇怪的问题:

php连接到
127.0.0.1
,但不连接到
localhost


如何解决这个问题?

必须在您的主机文件中定义localhost,在Windows和大多数OSs上默认为localhost

检查以下文本文件,看看有什么问题:

C:\WINDOWS\system32\drivers\etc\hosts
请注意,“主机”是文件,没有扩展名,不是文件夹。这个文件应该是非常空的,如果你看到条目,或者你的AV/垃圾邮件拦截程序添加了大量指向127.0.0.1的条目,或者恶意软件在其中写入了垃圾,尽管新条目低于旧条目。Localhost应该是该文件中的第一个条目。

请尝试:


IE-->工具-->选项-->连接-->局域网设置检查绕过本地地址代理也可以查看定义用户访问权限的mysql数据库。您可以在其中定义允许给定用户连接的源主机。您可以在命令行中尝试ping localhost以了解更多详细信息,它可能解析为:1:IP6相当于127.0.0.1

要解决此问题,请添加(或取消注释)行:

   127.0.0.1       localhost

C:\WINDOWS\system32\drivers\etc\hosts

中,我记得这是Mysql在WINDOWS上的一项长期存在且有文档记录的功能。关于本地套接字的工作方式之类的。

是本地主机解析为IPv6地址,而不是IPv4地址,而MySQL没有监听v4地址吗


解决方案是使localhost解析为v4地址,或使MySQL侦听v6地址。

如果MySQL连接到127.0.0.1,则通过TCP/IP实现,而如果MySQL连接到localhost,则通过套接字实现。

PHP是否适合mysql.sock?确保php.ini和my.conf对于Mac具有匹配的位置,以下是解决方案:

在MAC上使用localhost而不是127.0.0.1连接到MySQL。很长一段时间以来,我一直使用127.0.0.1在我的开发平台上连接MySQL,因为某些原因localhost无法工作。事实证明,这是因为127.0.0.1使用TCP/IP,而localhost使用套接字。ini文件指向mysql.sock的错误位置,所以您所要做的就是更改它,重新启动apache,瞧

Open php.ini: /private/etc/php.ini
Find the following line: mysql.default_socket = /var/mysql/mysql.sock
Replace with: mysql.default_socket = /tmp/mysql.sock
Restart apache: apachectl restart
注意:根据您的设置,您可能还需要更新php.ini中的以下行:

mysqli.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket = /tmp/mysql.sock
注意:如果没有php.ini文件,则需要复制提供的名为php.ini.default的默认值

sudo cp /private/etc/php.ini.default /private/etc/php.ini

via

如果您不在windows上,还可以测试mysql是否通过套接字进行连接,在本地通常是这样

使用mysql客户端强制tcp

mysql -usomeone -p --protocol=TCP
vs.套接字(linux上的默认设置)


后者不适用于我的
someone@127.0.0.1

该主机文件可能具有::1 for localhost。我通常会禁用任何与IP4无关的东西以使事情正常运行。@air:我编辑了你的问题,如果你不同意,请随意回滚。IIRC,我以前遇到过这个问题。我专门通过“127.0.0.1”向用户提供访问权限,但不是通过“localhost”。
mysql -usomeone -p 
mysql -usomeone -p --protocol=socket