CodeIgniter模型 - 用于更新任何表中任何列的create方法

时间:2013-11-14 16:28:52

标签: php codeigniter

这是一个CodeIgniter示例,用于通过向其中添加值(points)来更新特定表(users)中的特定列($points)。

function give_points($username,$points)
{
    $this->db->set('points', 'points + $points');
    $this->db->where('username', $username);
    $this->db->update('users'); 
}

现在,我想更改它,以便将列和表作为参数传递给它,目的是使其适用于任何给定的表/列组合。但是,我遇到了一些麻烦。这是我写的第一个版本:

//update column ($col) of table ($tbl) by adding value ($val)
function update_col($id,$col,$tbl,$val){
        $this->db->set($col, $col + $val);
        $this->db->where('id', $id);
        $this->db->update($tbl); 
    }

我的表是users,在这种情况下我要更新的列是tokens(INT),我希望将值减少25. tokens的当前值是40。

当我将此方法称为:

update_col($user_id,"tokens","users",-25);

不是将新值设置为40-25 = 15,而是将值从40更改为-25。因此,不是减去数字,而是将其设置为新值。

然后我尝试调整方法:

function update_col($id,$col,$tbl,$val){
        $this->db->set($col, $col.' + $val');
        $this->db->where('id', $id);
        $this->db->update($tbl); 
    }

现在它将值更新为0。

尝试使用double而不是单引号也将值设置为0.那么,我做错了什么?必须有办法做到这一点,我只是看不出还有什么我做错了。

2 个答案:

答案 0 :(得分:2)

您可以在$this->db->last_query()下面写$this->db->update($tbl);来查看生成的查询。我发布了另一种解决方案。你的问题是你在单引号内输入了值。将set方法更改为此方法,它应该可以正常工作$this->db->set($col, $col.' + '.$val);

function update_col($id,$col,$tbl,$val){
       $this->db->set($col, $col.' + '.$val);
       $this->db->where('id', $id);
       $this->db->update($tbl);
}

答案 1 :(得分:1)

$this->db->set($col, $col.' + $val');

看来你的给定参数会产生

set tokens = tokens +-25

尝试连接两者:

$this->db->set($col, $col.$val);

给出你的参数应该产生

set tokens = tokens-25

如果要添加总计,请使用+

传递参数
update_col($user_id,"tokens","users",'+25');

应该产生:

set tokens = tokens+25