我有以下php-codeigniter脚本,它试图使用active-record语法递增记录的字段:
$data = array('votes' => '(votes + 1)');
$this->db->where('id', $post['identifier']);
$this->db->update('users', $data);
这将生成以下SQL:
"UPDATE
usersSET
votes= '(votes + 1)' WHERE
id= '44'
“
它没有运行,但是这个SQL确实做了我想要的:"UPDATE
usersSET
votes= (votes + 1) WHERE
id= '44'
"` <--注意前后没有引号(votes + 1)
有人知道如何使用codeigniter的活动记录语法来实现这种类型的查询吗?
发布于 2011-06-23 06:26:07
您可以按如下所示进行操作:
$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)'
中删除反标记,这将产生将votes属性递增1的预期效果。
发布于 2013-07-19 11:56:24
$data = array('votes' => 'votes + 1');
foreach ($data as $key=>$val) {
$this->db->set($key, $val, FALSE);
}
$this->db->where('id', $post['identifier']);
$this->db->update('users', $data);
发布于 2019-07-24 15:36:16
您可以按如下所示进行操作:
public function increment_product_count(){
$product_id=$this->input->post('product_id');
$this->db->where('id', $product_id);
$this->db->set('click_count', 'click_count+1', FALSE);
$this->db->update('tbl_product');
}
https://stackoverflow.com/questions/6373564
复制相似问题