使用CodeIgniter Active Record函数在没有引号的MySQL语句中添加子句

时间:2010-01-16 02:35:48

标签: activerecord codeigniter

我想在codeigniter中使用活动记录更新一行,我只想增加一个字段值(received_qty = received_qty +1),我意识到我可以在通常的sql中做到这一点,但我不能在codeigniter活动记录中

$update['received_qty'] = 'received_qty + 1';
$update['received_date'] = date("Y-m-d");
$this->db->where($where);
$this->db->update('vrs_distribution', $update);

有人知道如何使用有效记录吗?

5 个答案:

答案 0 :(得分:37)

这样可行。

$this->db->set('received_qty', 'received_qty + 1', FALSE);
$this->db->set('received_date', date("Y-m-d"));
$this->db->where($where);
$this->db->update('vrs_distribution');

ActiveRecord将所有内容放入set(),where()和许多其他方法中。 where和set都可以使用$ escape的可选第三个参数,它是一个布尔值。将其设置为FALSE并且CodeIgniter不会转义任何内容,这意味着您的字段增量不会被视为字符串。

答案 1 :(得分:2)

或者你可以这样做:

$this->db->query('UPDATE vrs_distribution SET received_qty = received_qty + 1, received_date = CURDATE() WHERE id = ' . $id);

您需要修改WHERE子句以适合您

答案 2 :(得分:0)

状态设置为零(更新)

$this->db->set('IsCurrent', '0');       
$this->db->where('AcademicYearID',$academicYearId);
$this->db->update('academicyear');  

答案 3 :(得分:0)

我打算问一个类似的问题,但问题是一样的:我需要用间隔(expiry_date = expiry_date + interval 3 month)来更新日期,而Phil Sturgeon's answer确实解决了问题

然而,我意识到你仍然可以将数组用于可以有引号的字段,这意味着你可以写:

$this->db->set('received_qty', 'received_qty + 1', FALSE);
$this->db->set('expired_date', 'CURDATE() + INTERVAL 10 DAY', FALSE); //extra example 1
$update['received_date'] = date("Y-m-d");
$update['receiver'] = $receiver_name; //extra example 2
$this->db->where($where);
$this->db->update('vrs_distribution', $update);

$this->db->last_query()输出的位置:

UPDATE `vrs_distribution`
  SET `received_qty` = received_qty + 1,
      `expiry_date` = CURDATE() + INTERVAL 10 DAY, #extra example 1
      `received_date` = '2015-07-01 16:00:00',
      `receiver` = 'strike_noir', #extra example 2
  WHERE #where clause with backticks

请注意,使用set()的字段没有引号并首先显示。查询的其余部分有反引号(让" CodeIgniter protect the remaining fields")。

答案 4 :(得分:-2)

你似乎非常接近,CI的ActiveRecord中没有'一个递增'命令(或者在SQL中没有)。

$update['received_qty']++;
$update['received_date'] = date("Y-m-d");
$this->db->where($where);
$this->db->update('vrs_distribution', $update);