die('DB ERROR');
Сразу нет! Класс не должен останавливать приложение, если произошла ошибка. Он должен бросать исключение, а что делать дальше должен решать клиентский код.
никакой работы с БД не должно быть в модели
В каком смысле это написано? Где это написано?
Ухожу с синглтона
На каждый запрос будете создавать отдельное подключение к БД? Там вообще то есть ограничение на количество открытых.
Я не заметил особой разницы между работой с mysqli и с вашим классом. Инкапсуляция бинда параметров метод query только? Так унаследуйтесь от класса mysqli и напишите удобный метод для этого.
И почему вы не берёте какую то готовую обёртку? Благо их написано тысячи!