为什么mysql不允许通过域名连接,而是允许使用localhost



据我所知,https://www.php.net/manual/en/mysqli.construct.php使用CCD_ 1。我从hostinger那里买了一个服务器和域名。域名为sandygardening.com$conn = new mysqli("localhost", "DB_USER_NAME", "DB_PASSWORD", "DB_NAME");工作非常完美。但是如果我把实际的主机名设置为:

$conn = new mysqli("sandygardening.com", DB_USER_NAME, DB_PASSWORD, "DB_NAME");

这根本不起作用,使我无法访问用户。。。

准确的错误如下:

$conn = new mysqli("https://sandygardening.com/", DB_USER_NAME, DB_PASSWORD, DB_NAME);

Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/DB_USER_NAME/domains/sandygardening.com/public_html/crimewiki/include/functions.php on line 4  
Notice: Fatal error: Uncaught mysqli_sql_exception: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/DB_USER_NAME/domains/sandygardening.com/public_html/crimewiki/include/functions.php:4 Stack trace: #0 /home/DB_USER_NAME/domains/sandygardening.com/public_html/crimewiki/include/functions.php(4): mysqli->__construct('https://sandyga...', 'DB_USER_NAME', 'password', 'DB_NAME') #1  

然后使用$conn = new mysqli("sandygardening.com", DB_USER_NAME, DB_PASSWORD, "DB_NAME");

Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'DB_USER_NAME'@'2a02:4780:3:5::c' (using password: YES) in /home/DB_USER_NAME/domains/sandygardening.com/public_html/crimewiki/include/functions.php:4 Stack trace: #0

如果我也使用ip地址作为主机名,也会出现后面的错误。

我有一个共享主机。所有这些命令都在服务器上的php文件中运行。我无法访问服务器的htaccess、php.ini或httd.conf等文件。我的问题是,是什么导致mysql只监听localhost而不监听实际的hostname?对于大多数服务器来说,通常是这样吗?

  • 执行$conn = new mysqli("https://sandygardening.com/", ...)时,第一条错误消息:getaddrinfo失败

    这是因为new mysqli()在其第一个参数中需要一个类似$hostame0的主机名,但您给了它一个类似于https://example.com/的URL。当它像查找主机名一样查找该URL时,它发出了嘎嘎声。你在第二次尝试中解决了这个问题。

  • 第二条错误消息:用户'someuser'@'someIPv6Addr'的访问被拒绝(使用密码:YES(

    这意味着你的php软件能够访问你的MySQL服务器,但服务器拒绝了你的用户名/主机/密码组合。与许多系统不同,MySQL会检查您连接的主机以及您的用户名和密码。您现有的用户帐户可能是'someuser'@'localhost',它只允许通过localhost进行连接。您需要添加另一个用户'someuser'@'%'。该用户将能够从网络上的任何主机进行连接。(安全问题?确实如此。(

    询问您的主机供应商如何将该用户添加到MySQL。

我的问题是,是什么导致mysql只侦听localhost而不侦听实际主机名?

一些MySQL服务器被配置为只在本地主机(又名127.0.0.1,又名::1,又名环回(网络接口上侦听。但实际上,MySQL服务器正在监听来自网络的连接。我们之所以知道,是因为它甚至检查了你的用户名。

这些东西令人困惑,尤其是对初学者来说。这就是为什么预算托管供应商试图给出非常明确的指示,但没有解释如何以多种不同的方式做事。

最新更新