php – MySQLI 28000/1045用户’root’@’localhost’拒绝访问

我遇到了一些麻烦.所以我试图使用MySQLi连接到我的数据库,但我收到此错误

Warning: MysqLi::MysqLi(): (28000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /home/venge/public_html/library/classes/database.class.PHP on line 16

Warning: Missing argument 1 for Users::__construct(), called in /home/venge/public_html/routing.PHP on line 4 and defined in /home/venge/public_html/library/classes/users.class.PHP on line 3

Warning: MysqLi::MysqLi(): (28000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /home/venge/public_html/library/classes/database.class.PHP on line 16

Warning: Cannot modify header information - headers already sent by (output started at /home/venge/public_html/library/classes/database.class.PHP:16) in /home/venge/public_html/routing.PHP on line 11

.我不知道为什么它说“root”作为用户,我的代码如下.我可以使用该信息登录PHPMyAdmin.

<?PHP

$db['host'] = 'localhost';
$db['user'] = 'venge_main';
$db['pass'] = 'fakepassword';
$db['name'] = 'venge_panel';


class DB {
    function __construct($db) {
        $this->MysqLi = new MysqLi($db['host'], $db['user'], $db['pass'], $db['name']);
    }
    function query($i) {
        return $this->MysqLi->query($i);
    }
    function fetch_array($i) {
        return $i->fetch_array(MysqLI_ASSOC);
    }
    function num($i) {
        return $i->num_rows;
    }
}
?>

这是我的global.PHP文件

<?PHP
session_start();

$venge['library'] = 'library/classes/';

include_once($venge['library'] . 'users.class.PHP');
include_once($venge['library'] . 'database.class.PHP');
$users = new Users($database);
?>

这是我的用户类:

<?PHP
class Users {
    public function __construct($db) {
        $this->db = new DB($db);
    }
    public function uidset() {
        if (isset($_SESSION['uid'])) {
            return true;
        } else {
            return false;
        }
    }
    public function securitycheck() {
        if (isset($_SESSION['uid'])) {
            //passed
            return true;
        } else {
            //Failed
            die('No permissions');
        }
    }
}
?>

这是routing.PHP

<?PHP
class Routing {
    public function __construct($route) {
        $this->users = new Users();
        $this->route = $route;
    }
    public function File() {
        if (!$this->users->uidset()) {
            switch ($this->route) {
                default:
                    header("Location: /user/login");
                    break;
                case '/user/login':
                    include_once('library/pages/login.page.PHP');
                    break;
            }
        } else {
            switch ($this->route) {
                default:
                    header("Location: /venge");
                    break;
                case '/venge':
                    echo 'Welcome to <strong>Venge</strong> .';
                    break;
            }
        }
    }
}

$route = new Routing($_SERVER['ORIG_PATH_INFO']);

$route->File();
?>

解决方法:

错误的原因在于:

class Routing {
    public function __construct($route) {
        $this->users = new Users();//<-?
        $this->route = $route;
    }

您没有将参数传递给Users .__ construct($db)

使用凭据定义一个数组,并且传递如下:

class Routing {
    public function __construct($route) {
        $db = array();
        $db['host'] = 'localhost';
        $db['user'] = 'venge_main';
        $db['pass'] = 'fakepassword';
        $db['name'] = 'venge_panel';

        $this->users = new Users($db);
        $this->route = $route;
    }

或者使用全局$db变量而不是像我一样在本地定义它.但是在创建Users对象时必须将它传递给构造函数.

global.PHP中的错误

$users = new Users($database);

我想,一定是:

$users = new Users($db);

如果在该文件中定义了$db.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...