public $query - это неправильно с
десятка разных точек зрения, от архитектуры до простой житейской логики.
Но при этом, если бы данные в запрос передавались
правильно,
а не как как обычно, то чисто технически это бы сработало
В любом случае, public $query убрать, вместо этого добавить private $db, и в конструктор, соответственно, такой же параметр
public function addProduct(){
$query = 'INSERT INTO products (title, price, description, category, image, active) VALUES (?,?,?,?,?,?)';
$stmt = $this->db->prepare($query);
$stmt->bind_param("ssssss", $this->title, $this->price, $this->description, $this->category, $this->image, $this->$active);
$stmt->execute();
}