1

points这是一个 CodeIgniter 示例,用于通过向特定表 ( 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。当前值为tokens40。

当我像这样调用这个方法时:

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。

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

4

2 回答 2

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);
}
于 2013-11-14T16:34:57.360 回答
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
于 2013-11-14T16:41:16.113 回答