Хорошо ли написан класс БД?
die('DB ERROR');
Сразу нет! Класс не должен останавливать приложение, если произошла ошибка. Он должен бросать исключение, а что делать дальше должен решать клиентский код.никакой работы с БД не должно быть в модели
В каком смысле это написано? Где это написано?Ухожу с синглтона
На каждый запрос будете создавать отдельное подключение к БД? Там вообще то есть ограничение на количество открытых.
Я не заметил особой разницы между работой с mysqli и с вашим классом. Инкапсуляция бинда параметров метод query только? Так унаследуйтесь от класса mysqli и напишите удобный метод для этого.
И почему вы не берёте какую то готовую обёртку? Благо их написано тысячи!
1. Мое личное мнение - использовать PDO как движок для своей обертки - очень плохая идея. PDO универсален, тем самым он ограничивает многие возможности. По сути, это весьма усложненная и неторопливая махина. 
2. Метод query до неприличия простой. Я не вижу тут никаких плюшек, нет ни одного преимущества обертки над самим PDO. Я писал много времени обертку над MySql, можешь посмотреть, что обычно добавляется к возможностям. 
3. У обертки не должно быть методов типа getRows, getColumn и тп. отсебятины. Её функция - обрабатывать запросы, отдавать ответы и какие-то вспомогательные функции, типа lastInsertId и отдавать ошибки. Все остальное должно реализовываться в вышестоящем слое, неважно как ты его назовешь.
4. всё началось с фразы "никакой работы с БД не должно быть в модели".  это правильно и это ты правильно понял, абстрагировав слой БД от слоя модели. Советую почитать книгу Фаулера "Архитектуру корп. пр. приложений" и особенно главу "Источники данных". Без этой концепции ты дальше своей подделки не уедешь в знаниях.