PHP MYSQL 构建父模型


PHP MYSQL Building Parent Model

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

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;
    }
}

为什么要重新发明轮子?Codeigniter 的标准数据库类已经可以执行要创建的父模型将执行的所有操作。如果您正在编写自己的数据库包装器类并且不使用 CI,这是有意义的,但 CI 已经提供了这些功能,并且可以根据需要进行自定义/扩展。

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

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

例如,如果$columnSelect成为;

"x'; DROP TABLE members; --"

您的查询变为:

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