繁体   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