PHP MYSQL构建父模型

时间:2013-01-25 21:25:47

标签: php sql codeigniter inheritance pdo

为子模型将继承的父模型编写通用插入函数是否常见和/或明智?我在一个非常简单的CRUD应用程序上使用CodeIgniter \ PHP,但这个问题实际上是语言\框架独立的。 继承读取(选择)一个值的读取函数非常有效且感觉正确:     父模型

public function read($columnSelect,$columnCondition,$value) {
    $query = "SELECT $columnSelect FROM $tableName WHERE $columConditionn=?";
    $res = $this->db->query($query,$columnName);
    if ($res->result()->num_rows()>0)
        return $res->result();
    else 
        return false;

这可以让你检索用户ID,电子邮件,检查某些列是否存在等等,我觉得在大多数或所有模型中都会有用,所以在父模型中编写该函数是个好主意。所有更复杂的读取函数显然都是特定于每个模型的(例如,读取多个值的查询等) 那插入怎么样?除了编写函数以插入一个值,两个值等或编写一个'丑'函数以获取参数数组并根据数组构建插入查询时,我想不出任何通用插入,例如:

        public function genericInsert($columnList,$valueList) {

              $query = " INSERT INTO $tableName(
                        //now code that parses columnList and adds ','
                       //and then code that adds VALUES(..) in the same manner

这对我来说绝对不是一种“模式”,并且感觉不对。 我忽略了什么吗?你们对你的插件做了什么,它是针对每个模型的,还是你试图找到一种从父模型继承的方法?而且,如果你愿意,你发现自己的功能是什么? (更新,删除等)?

这是我父模型到目前为止的样子:

class MY_Model extends CI_Model {
    public $tableName;

    public function __construct($tableName) {
        parent::__construct();
        $this->tableName = $tableName;

    }

    public function read($columnSelect,$columnCondition,$value) {
        $query = "SELECT $columnSelect FROM $tableName WHERE $columConditionn=?";
        $res = $this->db->query($query,$columnName);
        if ($res->result()->num_rows()>0)
            return $res->result();
        else 
            return false;
    }
}

3 个答案:

答案 0 :(得分:0)

为什么要重新发明the wheel? Codeigniter的标准db类已经可以完成您要创建的父模型所能做的所有事情。如果您编写自己的数据库包装类不使用CI,那将是有意义的,但CI已经提供了这些功能,可以根据需要进行自定义/扩展。

答案 1 :(得分:0)

讨厌回答我自己的问题,但这正是我所寻求的 http://thephpcode.com/blog/codeigniter/a-smart-codeigniter-model

答案 2 :(得分:0)

只需要一些建议,在创建这样的查询时要小心非常。我没有看到代码中发生任何转义,使代码保持打开以进行SQL注入。

例如,如果$ columnSelect成为;

"x'; DROP TABLE members; --"

您的查询变为:

"SELECT 'x'; DROP TABLE members; -- FROM $tableName WHERE $columConditionn=?";