当前位置:  开发笔记 > 编程语言 > 正文

将代码与数据库功能分开

如何解决《将代码与数据库功能分开》经验,为你挑选了1个好方法。

我正在开发一个面向对象的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数量的最佳技术.我知道这样做的一种方法是在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;
    }
}

所以...我的问题.管理典型数据库应用程序将使用的大量查询的最佳技术是什么?我描述的方式是否是处理这种情况的正确方法?或者如何在DB类中注册查询列表并将每个传递给DB查询函数的唯一ID(例如USER_CHECKLOGIN)相关联?此方法也可以帮助提高安全性,因为它会限制可以仅运行到此列表中注册的查询,但在编写所有类函数时还要记住一件事.思考?



1> Bill the Liz..:

将SQL拉出到单独的函数中是一个不错的开始.您可以做的其他一些事情:

为数据库访问代码创建单独的类.这将有助于确保您没有在所有PHP文件中散布的SQL函数.

从外部文件加载SQL.这完全分离了您的SQL代码和PHP代码,使其更易于维护.

尽可能使用存储过程.这将完全从PHP代码中删除SQL,并通过降低外部SQL执行的风险来帮助提高数据库安全性.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有