我正在开发一个面向对象的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 */
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是找出减少内联SQL数量的最佳技术.我知道这样做的一种方法是在User中为User使用的每个查询编写函数(如下所示),但这可能导致相当多的函数.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以...我的问题.管理典型数据库应用程序将使用的大量查询的最佳技术是什么?我描述的方式是否是处理这种情况的正确方法?或者如何在DB类中注册查询列表并将每个传递给DB查询函数的唯一ID(例如USER_CHECKLOGIN)相关联?此方法也可以帮助提高安全性,因为它会限制可以仅运行到此列表中注册的查询,但在编写所有类函数时还要记住一件事.思考?
将SQL拉出到单独的函数中是一个不错的开始.您可以做的其他一些事情:
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |