Подтвердить что ты не робот

Поле приращения базы данных mysql с использованием синтаксиса активной записи codeigniter

У меня есть следующий php-codeigniter script, который пытается увеличить поле записи с использованием синтаксиса активной записи:

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

В результате создается следующий SQL:

"UPDATE Пользователи SET голосов = '(votes + 1)' WHERE ID = '44' "

Что не запускается, но этот SQL делает то, что я ищу: "UPDATE пользователи SET vote = (votes + 1) WHERE id = '44' "` < - Обратите внимание на отсутствие цитат вокруг (голосов + 1)

Кто-нибудь знает, как реализовать этот тип запроса с синтаксисом активной записи codeigniter?

4b9b3361

Ответ 1

Вы можете сделать следующее:

$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.

Ответ 2

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

Ответ 3

Вы можете сделать, как указано ниже:

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

    }