dzheka3d
@dzheka3d

Как подключиться к БД из класса?

Есть у меня функция, для подключения к БД (вкратце):
function db_Iconnect() {
	global $db;
	$db = new mysqli(HOST_NAME, USER_NAME, MYSQL_PASS, DATABASE_NAME);
}

Как мне обратиться сделать запрос к БД из этого класса?
db_Iconnect();
class news{
	var $posts = array();
	function GetPosts(){
		$res = $db->query("SELECT `id`, `name` FROM `posts`");
		while($row = $res->fetch_assoc()){
			$this->posts[$row['id']] = $row['name'];
		}
	}
}

Вот такая ошибка у меня:
Call to a member function query() on a non-object
  • Вопрос задан
  • 719 просмотров
Решения вопроса 1
DieZz
@DieZz
class News
{
    private $posts = [];
    private $db;

    /**
     * news constructor.
     *
     * @param $db
     */
    public function __construct($db)
    {
        $this->db = $db;
    }
    
   public function getPosts()
    {
        $res = $this->db->query("SELECT `id`, `name` FROM `posts`");
        while ($row = $res->fetch_assoc()) {
            $this->posts[$row['id']] = $row['name'];
        }

        return $this->posts;
    }
}

Функция db_Iconnect:
function db_Iconnect() 
{
    $db = new mysqli(HOST_NAME, USER_NAME, MYSQL_PASS, DATABASE_NAME);

    return $db;
}

но лучше использовать класс для подключения к ДБ.

В месте где планируете использовать класс news:
$db = db_Iconnect();
$news = new News($db);
$posts = $news->getPosts();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Сделатейте функцию function db_Iconnect() статичной static public, ну а дальше обращайтесь к ней в вашем классе ваш_класс::db_Iconnect()
Ответ написан
Ваш ответ на вопрос

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

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