【问题标题】:MySQL Error mysqli::__construct(): (HY000/2002): Connection refusedMySQL 错误 mysqli::__construct(): (HY000/2002): Connection denied
【发布时间】:2018-11-25 15:09:39
【问题描述】:

我正在尝试运行一个包含 MySQL 连接的 PHP 脚本,当我运行该命令时,我在终端中收到以下错误:

'Warning: mysqli::__construct(): (HY000/2002): Connection refused'

即使使用 PDO,我也会收到错误:

'Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in ...'

我在 Mac OS X 上运行脚本,我将 MAMP 作为 APACHE/MySQL 本地服务器。

我用来运行脚本的命令是:

'php main.php'

而带有 PDO 的 'main.php' 文件的内容是:

$db = new PDO('mysql:host=localhost;dbname=test',root,root);

使用 mysqli 连接器:

$db = new mysqli("localhost", "test", "root", "root");

我尝试使用 '127.0.0.1' 而不是 'localhost' 并且在这两种情况下都得到相同的错误。

【问题讨论】:

标签: php mysql mysqli pdo


【解决方案1】:

首先,使用localhost作为域名是not supported in PHP。它将解析为127.0.0.1

其次,即使使用127.0.0.1 也可能无法在具有多个接口或具有特殊路由规则的服务器中工作。运行mysqlcheck --help 并获取“主机”字段底部显示的IP 地址。例如:

port                              3306
host                              192.168.1.23

使用 MySQL 识别的 IP 和端口:

$db = new mysqli("192.168.1.23:3306", "test", "root", "root");

【讨论】:

  • 您能否分享有关“将无法解决”的声明的更多详细信息?我认为文档不一致,因为php.net/manual/en/pdo.connections.php 使用localhostw3schools.com/php/php_mysql_connect.asp 也这样做
  • ...此外,您提供的链接显示成功启动了 localhost127.0.0.1 的 MySQL 连接
  • 正如我在“PHP 不支持”(php.net/manual/en/mysqli.quickstart.connections.php) 链接中发布的那样,PHP 文档本身明确提到(第二段):“主机名 localhost 具有特殊含义。它必然会使用 Unix 域套接字。无法使用主机名 localhost 打开 TCP/IP 连接,您必须改用 127.0.0.1。"
  • 是的,如那里所写:“无法打开 TCP/IP 连接” - 使用套接字,这工作正常。此外,使用套接字会更快,因为您可以跳过网络开销(请参阅stackoverflow.com/q/1838358
猜你喜欢
  • 2017-07-08
  • 2021-01-19
  • 1970-01-01
  • 2019-10-23
  • 2019-07-29
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2018-06-11
相关资源
最近更新 更多