Просто классическая коллекция заблуждений, связанных с бд-врапперами.
1. Не надо писать функцию select().
Это какая-то массовая эпидемия: почему-то каждый пользователь похапе в какой-то момент решает, что ему просто невмоготу написать в SQL запросе пару ключевых слов, и решает сделать функцию, которая будет их за него писать. В результате на свет появляются совершенно одинаковые уродцы в виде функции select().
В итоге из практически натурального английского "выбрать все поля из таблицы пользователей, где логин равен тому-то и пароль тому-то" получаем на выходе непонятные иероглифы, про значение которых автор и сам забудет через пару месяцев.
$this->db->select('*', 'ftl_workers', "login = ? AND password = ?");
в этом коде автор экономит себе три слова.
Вопрос: стоит ли эта экономия читабельности и портируемости?
Вопрос: а что будет, когда автор узнает о других операторах SQL, таких, как GROUP BY, JOIN и пр.?
Неужели так сложно написать нормальный SQL запрос:
$this->db->get('SELECT * FROM ftl_workers WHERE login = ? AND password = ?");
Если же хочется нормальный квери билдер, то надо взять и посмотреть сначала на существующие. И понять, что квери-билдеры пишутся не для экономии трех слов.
2. Самые развесистые грабли. Класс бизнес-логики наследует классу БД. ООП же! Надо же что-то наследовать! При этом совсем не приходит автору в голову, что, скажем,
пользователь - это не база данных! И нет ни одной причины наследовать первого от второй. БД может присутствовать в классе как сервис. Как свойство. Но не как. праордитель
3. по какой-то неизвестной причине все поголовно писатели врапперов делают параметры доступа к базе переменными класса. Ну, видимо, чисто для солидности. при этом им не приходит в голову, что переменные
а) должны приходить из конфига
б) используются ровно один раз, в одной-единственной функции и больше никак в жизни класса не участвуют.
Вопрос: какой смысл делать эти параметры переменными класса?
4. Как всегда, исключение кидается только для того, чтобы ТУТ ЖЕ его поймать и радостно вывалить на экран. И здесь мы опять видим совершенно поголовное убеждение пользователей похапе в том, что они являются единственными и эксклюзивными пользователями своего сайта. Средний похапешник совершенно искренне не понимает, что у сайта могут быть и другие пользователи, которые эти сообщения ни к чему. А сам он не всегда сидит за монитором, чтобы увидеть сообщение об ошибке.
И это при том, что сам РНР обработает исключение в сто раз лучше - главное просто ему не мешать. Подробнее можно прочитать здесь:
phpfaq.ru/pdo#exceptions
В итоге, без переменных класса, функции Селект и "обработчика" ошибок от класса не остаётся ничего. И это правильно.
PDO - это уже дб-враппер, и "расширять" его - только портить. Во всяком случае, начинающим похапешникам настоятельно рекомендуется этого не делать, а научиться сначала пользоваться родным PDO.
Если уж так уж прям хочется сэкономить одну строчку, то изменения нужны совсем крошечные:
- надо сделать так, чтобы prepare возвращала statement, и singleton по вкусу.
получается
https://github.com/colshrapnel/thebestpdowrapper
С нормальным враппером код остаётся читаемым, но в то же время кратким:
class UserAuth {
function check($user, $pass) {
$sql = 'SELECT * FROM ftl_workers WHERE login = ? AND password = ?';
return DB::prepare($sql)->execute([$user, $pass])->fetch();
}
}
include 'bestpdo.php';
$ua = new UserAuth();
$ua->check('admin', 'pqwe');