Florens
@Florens
Изучаю возможности yii2

Как правильно подключить MySQli в отдельном файле?

Добрый день.
Возникает такой вопрос:
Есть два файла function.php и database.php.
Содержание database.php:
class DataBase
{
	private $db_host = 'localhost';//Хост Базы Данных
	private $db_user = 'root';//Пользователь БД
	private $db_pass = '';//Пароль БД
	private $db_name = 'd2';//Имя БД
	
	function connect()
	{
		$mysqli= new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name);
		//mysqli_error($mysqli);
		return $mysqli;
	}
	
	function disconnect()
	{
		mysqli_close();
	}
}

Содержание файла function.php:
include('engine/database.php');
$db = new DataBase();

class body
{
	
}
class user
{
	function login($name, $password)
	{
		$mysqli= $db->connect();
}
}


Получается ошибка в строке $con = $db->connect(); -> Fatal error: Call to a member function connect() on a non-object in

Как правильно мне исправить данную проблему?
  • Вопрос задан
  • 1526 просмотров
Пригласить эксперта
Ответы на вопрос 4
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
это адский пример, но ошибка из-за отсутствия public перед function

Я бы Вам настоятельно рекомендовал бы взять какой-нибудь php framework и разобрать его, посмотреть как там реализованы принципы ООП, MCV и т.д. Как подключать базу, как обезопасить ее и т.д.
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
$db в класс никак не передается.
Оно находится в другой области видимости, поэтому такой переменной внутри класса вообще не существует.
Ответ написан
Комментировать
@novrm
Используйте PDO.
Ответ написан
Комментировать
Immortal_pony
@Immortal_pony Куратор тега PHP
Для того, чтобы код работал, необходимо импортировать переменную $db из глобальной области видимости.
function login($name, $password)
{
    global $gb;
    $mysqli= $db->connect();
}


Чуть более правильным вариантом будет явное указание зависимости вашего класса от базы данных:
class user {
    private $db;

    public function __construct(DataBase $db)
    {
        $this->db = $db;
    }

    public function login($name, $password)
    {
        $mysqli = $this->db->connect();
    }
}

// Инициализация класса будет выглядеть так:
$user = new user($db);
$user->login();


PS Судя по коду, вы пытаетесь использовать какие-то устаревшие справочные материалы. Пожалуйста, ознакомьтесь с getjump.me/ru-php-the-right-way
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы