Ben şu an bir nesne yönelimli PHP web sitesi geliştiriyorum ve sistemin geri kalanından soyut veritabanı işlevselliği için en iyi yolu belirlemek için çalışıyorum. Şu anda, ben sistem kullandığı (oldukça çok mdb2 bir arayüz) tüm bağlantıları ve sorguları yöneten bir DB sınıf var. Bu sistemi kullanarak Ancak, benim kodunda her yerde gösteren SQL sorgu dizeleri bir sürü var olduğunu fark ettik. Örneğin, benim Kullanıcı sınıfta, ben böyle bir şey var:
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 */
}
Ne yapmak istiyorsunuz inline SQL miktarını azaltmak için en iyi tekniği öğrenmek olduğunu. Bunu yapmak için bir yol kullanıcı (aşağıdaki gibi bir şey) kullanımını yapar sorguları her biri için Kullanıcı içindeki işlevleri yazmak olacağını anlıyoruz, ancak epeyce fonksiyonlara yol açabilir.
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;
}
}
Yani ... benim soru. Tipik bir veritabanı uygulaması kullanmak olacağını sorguları büyük miktarda yönetmek için en iyi tekniği nedir? Ben açıklanan şekilde bu durumun işleme uygun şekilde olacaktır? Ya DB sınıfı içinde sorgularının bir listesini kayıt ve DB'ın sorgu işlevi geçirilir (örneğin USER_CHECKLOGIN gibi) benzersiz bir kimliği, her ile ilişkilendirmek hakkında? Bu listede kayıtlı olduğunu sadece bu çalıştırmak olabilir sorguları sınırlamak olur Bu yöntem ayrıca, güvenlik yardımcı olabilir, ancak tüm sınıf fonksiyonları yazarken hatırlamak için bir şey daha var. Düşünceler?