警告:mysqli_connect():(HY000/1045):访问被拒绝,用户'username'@'localhost'(使用密码:YES)

63

警告:mysqli_connect():(HY000 / 1045):在C:\ Users \ xampp \ htdocs \ PHP_Login_Script \ config.php的第6行拒绝用户“用户名”@“本地主机”(使用密码:YES)

即使我的配置文件如下,我在本地主机上也会收到上面的错误:

<?php

    define("DB_HOST", "localhost");
    define("DB_USER", "root");
    define("DB_PASSWORD", "");
    define("DB_DATABASE", "databasename");

    $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

这曾经可行,但现在不再有效。这段代码是否存在问题或者它现在已经停止工作了?

25个回答

35

该用户名、主机名和密码的组合不允许连接到服务器。请验证服务器上的权限表(如有必要,请重新加载授权),并确保您正在连接到正确的服务器。


1
先生,我只使用本地主机,并且我的用户名是root,密码为空。我认为这没有问题,因为以前它一直在工作。这种编码方式已经过时了吗?难道它不起作用的原因是这种编码方式?使用本地主机、root和空密码始终被接受。 - user2805663
11
你的服务器说了另外一种话。 - Ignacio Vazquez-Abrams
14
请确保您的密码不含有特殊字符,使用纯文本密码即可(例如:12345),它可以正常工作。这是我见过最奇怪的事情,我花了大约两个小时才搞清楚。 - Sathya
4
@Sathya 是正确的。不要使用 cPanel 生成密码的方法 - 显然一些特殊字符不能正常工作。我花了同样的两个小时 - 后来我发现了上面的评论... - Chiwda
在我的情况下,我选择了服务器上的“仅本地访问”。所以我没有权限。只需将其设置为任何主机,问题就迎刃而解了。 - AndyNope
显示剩余3条评论

15

如果你正在运行wamp,请进行更新。

define("DB_HOST", "localhost");

到您的机器IP地址(我的是192.168.0.25);

define("DB_HOST", "192.168.0.25");

你可以在Windows上通过在控制台中键入ipconfig或在Mac / Linux上键入ifconfig来找到它。


1
在WAMP上,我们还需要确保PHP只连接到mySQL。默认情况下,它会连接到MariaDB。可以通过更改默认的SQL服务器为mySQL来从WAMP托盘图标进行更改。 - thisisjaymehta
我也在我的本地Mac上做了这件事,但在localhost上无法工作。必须输入127.0.0.1才行。 - moiamserru

15

请确保您的密码没有特殊字符,只使用纯文本密码(例如:12345),它将有效。这是我见过的最奇怪的事情。我花了大约2个小时才弄清楚。

注意:下面提到的12345是您的纯文本密码

GRANT ALL PRIVILEGES ON dbname.* TO 'yourusername'@'%' IDENTIFIED BY '12345';

1
虽然这个答案是最正确的,但请不要使用12345,因为它是世界上使用最多的前十个密码之一,但请确保您的密码是字母数字混合的。通过添加几个额外的字符,例如“smJ4bJ39kHab29PpfjKq”,仍然可以提供与那些cPanel随机生成的密码相同或更好的熵,同时仍然排除特殊字符。 - Nosajimiki
不知道为什么一个服务器会出现这种情况,类似的密码在另一个服务器上却可以使用,顺便说一下,你的发现很好!它解决了问题。 - Rakibul Haq
我简直不敢相信这个方法居然奏效了,但它确实结束了我过去三个多小时的疯狂!字母数字密码万岁!! - RyJ

11

mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

使用DB_HOST代替DB_SERVER


为什么?一个人如何调用他们的变量或常量有什么区别吗? - vlex
3
用户在问题中传递了错误的常量名称。 - Jack

9

看一下你的代码 你定义了DB_HOST并在查询DB_SERVER。DB_USER和DB_USERNAME 使用这段代码

define("DB_SERVER", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_DATABASE", "databasename");

$connect = mysqli_connect(DB_SERVER , DB_USER, DB_PASSWORD, DB_DATABASE);

5

我已经修复了一些问题,这里定义的“DB_HOST”也应该在下面称为“DB_HOST”,“DB_USER”也应该在下面称为“DB_USER”,始终检查代码以确保它们相同。

<?php
    define("DB_HOST", "localhost");
    define("DB_USER", "root");
    define("DB_PASSWORD", "");
    define("DB_DATABASE", "");

    $db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
?>

4
你把DB_USER定义了但是在使用时用的是DB_USERNAME。此外,PHP报错显示无法使用username@localhost进行访问,需要使用root@localhost。请更改你的定义或连接参数。

2

这是您的代码:

<?php

    define("DB_HOST", "localhost");
    define("DB_USER", "root");
    define("DB_PASSWORD", "");
    define("DB_DATABASE", "databasename");

    $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

?>

这个消息唯一的错误是:
1. 您定义了一个`DB_USER`,但在调用时使用了`DB_USERNAME`。
下次请更加小心。
对于想要开始编写PHP代码的初级程序员来说,最好不要使用自己不太熟悉的东西。
仅作为建议,请尝试使用更常见的代码(第一次)。
例如:不要使用`define()`语句,而应该使用变量声明,如`$db_user = 'root';`
祝您拥有愉快的体验 :)

2

使用这个

设置完成后,您将不会再次遇到此问题。

SET PASSWORD FOR root@localhost = PASSWORD('your_root_password');

在使用这个查询后,我遇到了困难,但是一切问题都得到了解决。


2

我在使用XAMPP 7和opencart Arabic 3时遇到了相同的问题。将localhost替换为实际的机器名称可以解决此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接