使用codeigniter的活动记录语法增加mysql数据库的字段

Cas*_*ynn 59 mysql sql activerecord codeigniter

我有以下php-codeigniter脚本,它尝试使用活动记录语法递增记录的字段:

$data = array('votes' => '(votes + 1)');
$this->db->where('id', $post['identifier']);
$this->db->update('users', $data);
Run Code Online (Sandbox Code Playgroud)

这会产生以下SQL:

"UPDATE用户SET投票= '(votes + 1)' WHEREID = '44'"

哪个不运行,但是这个SQL确实做了我正在寻找的东西: "UPDATE用户SET投票= (votes + 1) WHEREID = '44'"`< - 注意缺少引号(投票+ 1)

有没有人知道如何使用codeigniter的活动记录语法实现这种类型的查询?

小智 116

你可以这样做:

$this->db->where('id', $post['identifier']);
$this->db->set('votes', 'votes+1', FALSE);
$this->db->update('users');
Run Code Online (Sandbox Code Playgroud)

这样做的原因是因为第三个(可选)FALSE参数告诉CodeIgniter不用反引号(')保护生成的查询.这意味着生成的SQL将是:

UPDATE users SET votes= votes + 1 WHERE id= '44'

如果您注意到,将从中删除反引号'(votes+1)',这会产生将votes属性递增1的所需效果.