我有以下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的活动记录语法实现这种类型的查询?
答案 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');
}