【问题标题】:Warning: mysqli_connect(): (HY000/1045): Access denied for user 'username'@'localhost' (using password: YES)警告:mysqli_connect(): (HY000/1045): Access denied for user 'username'@'localhost' (using password: YES)
【发布时间】:2014-09-30 04:52:21
【问题描述】:

警告:mysqli_connect(): (HY000/1045): Access denied for user 'username'@'localhost' (using password: YES) in C:\Users\xampp\htdocs\PHP_Login_Script\config.php on line 6

警告:mysqli_real_escape_string() 期望参数 1 为 mysqli,布尔值在第 10 行的 C:\Users\xampp\htdocs\PHP_Login_Script\login.php 中给出

警告:mysqli_real_escape_string() 期望参数 1 为 mysqli,布尔值在第 11 行的 C:\Users\xampp\htdocs\PHP_Login_Script\login.php 中给出

警告:mysqli_query() 期望参数 1 为 mysqli,布尔值在第 15 行的 C:\Users\xampp\htdocs\PHP_Login_Script\login.php 中给出

警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,在第 16 行的 C:\Users\xampp\htdocs\PHP_Login_Script\login.php 中给出 null

警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,在第 19 行的 C:\Users\xampp\htdocs\PHP_Login_Script\login.php 中给出 null

即使我的配置文件是这样的,我也会在 localhost 上收到此错误:

<?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);

?>

这曾经有效,但现在不再有效。这段代码有问题还是现在不起作用? This 是我现在正在做的教程。

【问题讨论】:

    标签: php mysql database phpmyadmin localhost


    【解决方案1】:

    在 phpmyadmin 中数据库的权限部分,确保使用特权用户和密码。我的默认用户是“root”,没有密码。我遇到了这个问题,因为我在 w3schools 中搜索并复制粘贴整个脚本并找出问题所在

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    发生这种情况的原因有很多。就我而言,我只需要更改端口。您可以在定义 DB_HOST 时在冒号后指定它。

    define( 'DB_HOST', localhost:3308 )

    【讨论】:

      【解决方案3】:

      有人使用 XAMPP 8。实际上 XAMPP 在 VM 中安装 MySQL,因此通过 XAMPP 中显示的 IP 地址连接它。本地主机上没有 MySQL 服务器。

      【讨论】:

        【解决方案4】:

        并不是说任何人在输入密码时都会打开 CAPS……但它可能会出现此错误。

        【讨论】:

          【解决方案5】:

          在 90% 的情况下,您都会尝试上述答案。对我来说,我的问题是我的数据库密码中有一个 $。

          $servername = '127.0.0.1';
          $username = 'user_bob';
          $password = 'sdfasdf$B';
          
          $conn = mysqli_connect($servername, $username, $password, 'any_database');
          
          //DO NOT USE DOUBLE QUOTES;
          //$password = "sdfasdf$B"; 
          

          【讨论】:

            【解决方案6】:

            使用这个

            设置完成后,您将不会再收到此问题

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

            使用此查询后,我陷入了这个问题,一切都解决了

            【讨论】:

              【解决方案7】:

              我这里修复了一些东西,这里定义的“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);
              ?>
              

              【讨论】:

                【解决方案8】:

                就我而言,问题是:

                define ('DB_PASSWORD', "MyPassw0rd!'");
                

                (双“之前的奇数单”)

                【讨论】:

                  【解决方案9】:

                  XAMPP 7 和 opencart Arabic 3 也遇到了同样的问题。 用实际机器名替换 localhost 解决了这个问题。

                  【讨论】:

                    【解决方案10】:

                    我在尝试与 root 以外的其他用户连接时遇到此错误,我已设置为限制访问。

                    在 mysql 中,我将用户 MofX 设置为主机 %,但它无法连接。

                    当我将用户的主机更改为 127.0.0.1 时,就像在 'MofX'@'127.0.0.1' 中一样,它起作用了。

                    【讨论】:

                    • 我在 MacOs 上使用 MAMP 并将 'localhost' 替换为 '127.0.0.1' 解决了这个问题。
                    【解决方案11】:

                    确保您的密码没有特殊字符,并且只保留一个普通密码(例如:12345),这样就可以了。这是我见过的最奇怪的事情。我花了大约 2 个小时才弄清楚这一点。

                    注意:下面提到的12345是你的普通密码

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

                    【讨论】:

                    • 虽然这个答案是最正确的,但特别是不要使用 12345,因为它是世界上最常用的 10 种密码之一,但请务必保留您的密码字母数字。通过添加一些额外的字符,像“smJ4bJ39kHab29PpfjKq”这样的东西仍然可以提供与那些 cPanel 随机生成的密码相同或更好的熵,同时仍然排除特殊字符。
                    • 不知道为什么在一台服务器上会出现这种情况,在另一台服务器上也可以使用类似的密码,顺便说一句!它解决了问题。
                    • 我不敢相信这会奏效,但它确实结束了我过去 3 个多小时以来所经历的疯狂!字母数字密码 FTW!!
                    【解决方案12】:

                    上面已经回答了这个问题,只是为了让您在连接中同时使用所有四个字符串感到舒服

                    <?php
                      define("DB_HOST", "localhost");
                      define("DB_USER", "root");
                      define("DB_PASSWORD", "");
                      define("DB_DATABASE", "databasename");
                    
                      $db = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
                      // you could test connection eventually using a if and else conditional statement, 
                      // feel free to take out the code below once you see Connected!
                      if ($db) {
                        echo "Connected!";
                      } else {
                        echo "Connection Failed";
                      }
                    ?>
                    

                    【讨论】:

                      【解决方案13】:

                      我的 AWS RDS MySQL 也出现了同样的问题。刚才,answered 类似 question 这里。看了各种来源,但截至此线程,几乎都缺乏答案。 虽然这个线程对我有帮助,但请记住调整以更新服务器上的主机名。访问您的 SSH 并按照以下步骤操作:

                      cd /etc/
                      sudo nano hosts
                      

                      现在,在此处附加您的主机名: 例如:

                      127.0.0.1 localhost
                      127.0.0.1 subdomain.domain.com [if cname redirected to endpoints]
                      127.0.0.1 xxxxxxxx.xxxx.xxxxx.rds.amazonaws.com [Endpoints]
                      

                      现在,如下配置config/database.php

                      $active_group = 'default';
                      $query_builder = TRUE;
                      
                      $db['default'] = array(
                          'dsn'   => '',
                          'hostname' => '35.150.12.345',
                          'username' => 'user-name-here',
                          'password' => 'password-here',
                          'database' => 'database-name-here',
                          'dbdriver' => 'mysqli',
                          'dbprefix' => '',
                          'pconnect' => FALSE,
                          'db_debug' => TRUE,
                          'cache_on' => FALSE,
                          'cachedir' => '',
                          'char_set' => 'utf8',
                          'dbcollat' => 'utf8_general_ci',
                          'swap_pre' => '',
                          'encrypt' => FALSE,
                          'compress' => FALSE,
                          'stricton' => FALSE,
                          'failover' => array(),
                          'save_queries' => TRUE
                      );
                      

                      其中35.150.12.345 是您的IPv4 公共IP,位于ec2-dashboard &gt; Network Interfaces &gt; Description : RDSNetworkInterface &gt;&gt; IPv4 Public IP('35.150.12.345') 那里。

                      注意:请注意,只有 IPV4 可以在“主机名”选项下工作。 hostname、cname、domains会输出数据库连接错误。

                      【讨论】:

                        【解决方案14】:

                        定义参数有错字,将DB_HOST改为DB_SERVERDB_USER改为DB_USERNAME

                        <?php
                        
                            define("DB_SERVER", "localhost");
                            define("DB_USERNAME", "root");
                            define("DB_PASSWORD", "");
                            define("DB_DATABASE", "databasename");
                            $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
                        
                        ?>
                        

                        【讨论】:

                          【解决方案15】:

                          这是你的代码:

                          <?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';

                          祝你有个愉快的经历:)

                          【讨论】:

                            【解决方案16】:

                            尝试改变:

                            define("DB_SERVER", "localhost");
                            

                            到这里:

                            define("DB_SERVER", "127.0.0.1");
                            

                            【讨论】:

                              【解决方案17】:

                              看看你的代码 您定义了 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);
                              

                              【讨论】:

                                【解决方案18】:
                                $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
                                
                                Put " DB_HOST " instead of " DB_SERVER " also 
                                put " DB_USER " Instead of " DB_USERNAME " 
                                

                                比它工作正常!

                                【讨论】:

                                  【解决方案19】:

                                  您是否同时有两个连接?如果是这样,请在每次不需要时关闭它。

                                  【讨论】:

                                    【解决方案20】:

                                    如果你正在运行 wamp 更新

                                    define("DB_HOST", "localhost");
                                    

                                    到你的机器ip地址(我的是192.168.0.25);

                                    define("DB_HOST", "192.168.0.25");
                                    

                                    您可以通过在控制台中输入 ipconfig 或在 mac/linux 上输入 ifconfig 在窗口中找到它

                                    【讨论】:

                                    • 在 WAMP 上,还需要确保 PHP 仅连接到 mySQL。默认情况下,它将连接到 MariaDB。通过将默认 SQL 服务器更改为 mySQL,可以将其从 WAMP 托盘图标更改。
                                    • 也必须在我的本地 Mac 上的 OSX 上执行此操作。没有使用本地主机。必须改为输入 127.0.0.1。
                                    【解决方案21】:

                                    mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

                                    使用 DB_HOST 而不是 DB_SERVER

                                    【讨论】:

                                    • 为什么?调用变量或常量的方式有何不同?
                                    • 在问题中用户传递了错误的常量名称。
                                    【解决方案22】:

                                    试试

                                    define("DB_PASSWORD", null);
                                    

                                    这些都是警告 试试

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

                                    但是我会建议你设置一个root密码

                                    【讨论】:

                                      【解决方案23】:

                                      您定义为 DB_USER 但使用为 DB_USERNAME。 php 也说 username@localhost 无法访问。不是 root@localhost。

                                      更改您的定义或连接参数。

                                      【讨论】:

                                        【解决方案24】:

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

                                        【讨论】:

                                        • 先生,我只使用本地主机,我有 root 作为用户名和一个空白密码..我看不出它有什么问题,因为在它工作之前它已经过时了吗?这种编码方式就是它的原因不工作?使用 localhost 就是这样,总是接受 root 和空白密码
                                        • 您的服务器另有说明。
                                        • 等等,让我再次检查一下如何连接到本地主机,以确保我能回到你身边
                                        • 确保您的密码没有特殊字符,并且只保留一个普通密码(例如:12345),它会起作用。这是我见过的最奇怪的事情。我花了大约 2 个小时来解决这个问题。
                                        • @Sathya 是对的。不要使用 cpanel 生成密码的方法 - 显然某些特殊字符不起作用。我花了同样的 2 个小时 - 然后我找到了上面的评论......
                                        猜你喜欢
                                        • 2018-06-15
                                        • 2023-03-23
                                        • 2019-06-26
                                        • 2016-09-28
                                        • 2012-04-28
                                        • 2020-03-26
                                        • 2018-05-16
                                        相关资源
                                        最近更新 更多