У меня проблемы. Поэтому я пытаюсь подключиться к моей базе данных с помощью 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; }
Вы не передаете параметр пользователям .__ 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 = new Users($database);
Я думаю, это должно быть:
$users = new Users($db);
Если в этом файле задано $ db.
Обычно это означает, что один из ваших host
, database
, user
или password
неверен.
В моем случае это был host
, я обычно использую localhost, но на этот раз я видел в своих cPanel
> MySQL® Databases
что я не должен использовать localhost и istead, я должен использовать mysql5.xxxxxxx.net.
Это сообщение помогло мне:
Адрес сервера mysql – mysql5.xxxxxxxx.net. При подключении к серверу mysql вы должны указать этот узел.