Я сейчас разрабатываю объектно-ориентированный сайт PHP и пытаюсь определить лучший способ абстрагировать функциональность базы данных от остальной системы. Прямо сейчас у меня есть класс DB, который управляет всеми соединениями и запросами, которые использует система (это в значительной степени интерфейс к MDB2). Однако, используя эту систему, я осознал, что у меня в коде много строк SQL-запросов. Например, в моем классе User у меня есть что-то вроде этого:
function checkLogin($email,$password,$remember=false){
$password = $this->__encrypt($password);
$query = "SELECT uid FROM Users WHERE email=? AND pw=?";
$result = $this->db->q($query,array($email,$password));
if(sizeof($result) == 1){
$row = $result->fetchRow(MDB2_FETCHMODE_ASSOC);
$uid = $row['uid'];
}else{
return false;
}
/* Rest of the login script */
}
Что я хотел бы сделать, так это найти лучший метод для сокращения количества встроенного SQL. Я понимаю, что одним из способов сделать это было бы написание функций внутри пользователя для каждого из запросов, которые использует пользователь (что-то вроде следующего), но это может привести к довольно большому количеству функций.
function checkLogin($email,$password,$remember=false){
$password = $this->__encrypt($password);
$uid = $this->do_verify_login_query($email,$password);
/* Rest of the login script */
}
function do_verify_login_query($email,$encpw){
$query = "SELECT uid FROM Users WHERE email=? AND pw=?";
$result = $this->$db->q($query,array($email,$encpw));
if(sizeof($result) == 1){
$row = $result->fetchRow(MDB2_FETCHMODE_ASSOC);
return $row['uid'];
}else{
return false;
}
}
Итак ... мой вопрос. Каков наилучший метод управления большим количеством запросов, который будет использоваться типичным приложением базы данных? Будет ли способ, который я описал, быть правильным способом справиться с этой ситуацией? Или как насчет регистрации списка запросов в классе DB и связывания с каждым уникальным идентификатором (таким как USER_CHECKLOGIN), который передается в функцию запроса DB? Этот метод также может помочь с безопасностью, так как он будет ограничивать запросы, которые могут быть выполнены, только теми, которые зарегистрированы в этом списке, но это еще одна вещь, которую следует помнить при написании всех функций класса. Мысли?