Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter模型-创建用于更新任何表中任何列的方法_Php_Codeigniter - Fatal编程技术网

Php 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->

这是一个CodeIgniter示例,用于通过向特定表(
用户
)中的特定列(
)添加值(
$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`SET
tokens\u gold
='tokens\u gold-25',其中
id
=1
。我不知道为什么会出现单引号,因为我只是尝试了
$col.$val`而没有任何引号。也许我需要以某种方式转义引号?我刚刚尝试过,它也将值设置为0
$this->db->last\u query()
打印出
UPDATE
users`SET
tokens\u gold
='tokens\u gold+-25',其中
id
=1
。也许最好将加号/减号与
$val`分开传递,然后执行
设置($col,$col.$plusorminus.$val)
。等等,我会更新可以容纳这些的函数。我找到了解决方案-我只需在set()中添加第三个'FALSE'参数为了强制转义
标记-25周围生成的引号。
set tokens = tokens+25