Php CodeIgniter模型-创建用于更新任何表中任何列的方法
这是一个CodeIgniter示例,用于通过向特定表(Php CodeIgniter模型-创建用于更新任何表中任何列的方法,php,codeigniter,Php,Codeigniter,这是一个CodeIgniter示例,用于通过向特定表(用户)中的特定列(点)添加值($points)来更新该列 现在,我想对其进行更改,以便将列和表作为参数传递给它,目的是使其能够与任何给定的表/列组合一起工作。然而,我遇到了一些麻烦。这是我写的第一个版本: //update column ($col) of table ($tbl) by adding value ($val) function update_col($id,$col,$tbl,$val){ $this->
用户
)中的特定列(点
)添加值($points
)来更新该列
现在,我想对其进行更改,以便将列和表作为参数传递给它,目的是使其能够与任何给定的表/列组合一起工作。然而,我遇到了一些麻烦。这是我写的第一个版本:
//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。标记的当前值为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
尝试使用双引号而不是单引号进行相同操作也会将值设置为0。那么,我做错了什么?一定有办法做到这一点,我只是看不出还有什么地方我可能做错了。你可以在$this->db->update($tbl)下写$this->db->last\u query()
以查看生成的查询。我发布了一个替代方案。你的问题是你在单引号中输入了值。将set方法更改为this,它应该可以正常工作$this->db->set($col,$col.+'.$val)代码>
它似乎与您给定的参数将产生
set tokens = tokens +-25
set tokens = tokens-25
请尝试将这两个连接起来:
$this->db->set($col, $col.$val);
在给定参数的情况下,应该生成
set tokens = tokens +-25
set tokens = tokens-25
如果要添加到总数中,请使用+
update_col($user_id,"tokens","users",'+25');
应产生:
set tokens = tokens+25
是的,但是如果我传递一个正的$val
(例如,25),我认为它将产生set tokens=tokens25
,并抛出一个错误。因此,传递带有加号或减号的参数:+25
。这两种情况都将值设置为0。这是形成的查询:UPDATE
users`SETtokens\u gold
='tokens\u gold-25',其中id
=1。我不知道为什么会出现单引号,因为我只是尝试了
$col.$val`而没有任何引号。也许我需要以某种方式转义引号?我刚刚尝试过,它也将值设置为0$this->db->last\u query()
打印出UPDATE
users`SETtokens\u gold
='tokens\u gold+-25',其中id
=1。也许最好将加号/减号与
$val`分开传递,然后执行设置($col,$col.$plusorminus.$val)
。等等,我会更新可以容纳这些的函数。我找到了解决方案-我只需在set()中添加第三个'FALSE'参数为了强制转义标记-25周围生成的引号。
set tokens = tokens+25