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 減らしたいです。現在の値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 に更新されました。

単一引用符の代わりに二重引用符で同じことを試みると、値も 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

2つを連結してみてください:

$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 に答える