Я собирался задать похожий вопрос немного по-другому, но проблема была та же: мне нужно было обновить дату с интервалом (expiry_date = expiry_date + interval 3 month
) и Фил Стерджен ответ действительно решил проблему.
Однако я понял, что вы все еще можете использовать массив для полей, которые могут иметь кавычки, что означает, что вы можете написать:
$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 защитить оставшиеся поля ").