这是一个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.那么,我做错了什么?必须有办法做到这一点,我只是看不出还有什么我做错了。
答案 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