mysqli :: __ construct():( HY000 / 1045):用户'lfc_site'@'localhost'拒绝访问(使用密码:YES)

时间:2017-11-10 23:37:14

标签: php mysql centos mariadb plesk

我将托管平台从cPanel切换到Plesk,似乎在我的某个网站上遇到了一些脚本问题。主站点运行在最新版本的Joomla上,并使其数据库连接没有错误。我有一个外部脚本,我在一个cron作业上运行,但似乎没有连接。我收到这个错误:

mysqli::__construct(): (HY000/1045): Access denied for user 'lfc_site'@'localhost' (using password: YES)

我必须假设它与我的连接类有关,所以我将在此处发布:

  1. 我有一个包含数据库登录凭据的cofig.ini。

    [数据库] username = database_user 密码= ****** dbname = database_name

  2. 然后我的连接类是这样的:

    <?php
    //Database connection class
    class Db {
      protected static $connection;
      public function connect() {    
        if(!isset(self::$connection)) {
          global $config;
          self::$connection = new mysqli('localhost:3306',$config['username'],$config['password'],$config['dbname']);
        }
        if(self::$connection === false) {
          return false;
        }
        return self::$connection;
      }
      public function query($query) {
        $connection = $this -> connect();
        $result = $connection -> query($query);
        return $result;
      }
      public function select($query) {
        $rows = array();
        $result = $this -> query($query);
        if($result === false) {
            return false;
        }
        while ($row = $result -> fetch_assoc()) {
            $rows[] = $row;
        }
        return $rows;
      }
      public function error() {
        $connection = $this -> connect();
        return $connection -> error;
      }
      public function quote($value) {
        $connection = $this -> connect();
        return "'" . $connection -> real_escape_string($value) . "'";
      }
    }
    ?>
    

    然后最后我的脚本运行查询......

    <?php
    require_once('/var/www/vhosts/user/httpdocs/db.php');
    $config = parse_ini_file('/var/www/vhosts/user/httpdocs/config.ini');
    
    $db = new Db();
    $rows = $db -> select('
        SELECT * 
        FROM milestones 
        WHERE status != "arrived" 
        AND departure_time BETWEEN (NOW() - INTERVAL 12 HOUR) 
        AND (NOW() + INTERVAL 12 HOUR) 
        AND type = "4"
    ');
    
    ?>
    

    我猜可能有一个未启用的模块禁止此脚本正确建立连接,就像我说的那样,Joomla脚本似乎使用完全相同的凭据连接而没有问题?

1 个答案:

答案 0 :(得分:0)

你的意思是&#34;外部脚本&#34;?

根据你给出的输出我假设它与Joomla安装位于同一台机器上。

问题很可能不在于您的凭据(如果它们适用于Joomla并且您已经仔细检查过它们),而是使用您提供的主机名或服务器配置或MariaDB用户(lfc_site)权限。

您可以尝试将代码中的127.0.0.1更改为plesk db,看看它是否有所不同。

如果没有,请通过SSH连接到您的服务器并提供输出

  1. SELECT user, host FROM mysql.user WHERE user = 'lfc_site';然后grep bind /etc/mysql/my.cnf
  2. Index data1 data2 data3 0 x0 x0 x0 1 x1 x1 x1 2 x2 x2 x2 ... n xn xn xn
  3. 进一步调查。