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

时间:2011-06-16 14:28:21

标签: mysql sql codeigniter activerecord

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

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

这会生成以下SQL:

"UPDATE {用户{1}} {票{1}} ID为SET

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

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

3 个答案:

答案 0 :(得分:111)

您可以执行以下操作:

$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所需的效果。

答案 1 :(得分:4)

$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);

答案 2 :(得分:0)

您可以按照以下说明进行操作:

    public function increament_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');

    }