我有以下php-codeigniter脚本,该脚本尝试使用活动记录语法来增加记录的字段:
$data = array('votes' => '(votes + 1)'); $this->db->where('id', $post['identifier']); $this->db->update('users', $data);
这将产生以下SQL:
"UPDATE用户的SET投票= '(votes + 1)' WHERE编号= '44'“
"UPDATE
SET
= '(votes + 1)' WHERE
= '44'
哪个不会运行,但是此SQL可以满足我的要求: "UPDATE用户SET投票= (votes + 1) WHEREid = '44'“`<-请注意缺少引号(投票+ 1)
= (votes + 1) WHERE
有谁知道如何用codeigniter的活动记录语法实现这种类型的查询?
您可以执行以下操作:
$this->db->where('id', $post['identifier']); $this->db->set('votes', 'votes+1', FALSE); $this->db->update('users');
之所以起作用,是因为第三个(可选)FALSE参数告诉CodeIgniter不要用反引号(')保护生成的查询。这意味着生成的SQL将是:
'
UPDATE users SET votes= votes + 1 WHERE id= '44'
如果您注意到,则从中删除了反引号'(votes+1)',从而产生了将表决属性增加1的预期效果。
'(votes+1)'