簡體   English   中英

Codeigniter,通過變量中包含的值增加數據庫值

[英]Codeigniter, increase database value by value contained in variable

我正在使用codeigniter,我在我的模型中有以下功能來給用戶指點。 但它不起作用,而是將points列設置為0。

這是它在codeigniter手冊中的編寫方式。 因此我不知道為什么它不起作用......

謝謝

function give_points($username,$points)
{
    $this->db->set('points', 'points + $points');
    $this->db->where('username', $username);
    $this->db->update('users'); 
    echo"done";
}

我相信你必須告訴CI專門不要逃避文本。 我沒有一個CI安裝方便測試這個,但我認為它是這樣的:

$this->db->set('points', 'points + ' . (int) $points, FALSE);

不確定這是您的問題的原因,但您使用單引號,在以下行:

$this->db->set('points', 'points + $points');

有了這個, $points字符串就會按原樣注入到你的SQL查詢中 - 這不是它將要使用的值。


如果你想要插入$points (所以它的值放在它的位置,在那個字符串中) ,你必須使用雙引號:

$this->db->set('points', "points + $points");


有關變量插值的更多信息,請參閱PHP手冊的變量解析部分。

如果有機會,請始終檢查創建的SQL查詢 - 我不知道如何使用CI。

但是,你的set()看起來有缺陷。

$this->db->set('points', "points + $points");

以前,由於您使用單引號而不是雙引號, $points字符串的一部分,而不是由$points的內容擴展 - 請參閱PHP中有關字符串手冊

$this->db->set('points', 'points + ' . (int) $points);

稍微好一點的代碼是上面的代碼,因為它會破壞可能的SQL注入 ,具體取決於$points最初的來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM