Это ошибка из базы данных.
Вы можете скрыть в /application/config/database.php
$db['default']['db_debug'] = FALSE;
Иначе, вы можете позаботиться об этом. Я предлагаю просто проверить, существует ли значение:
$this->db->where('id', $id);
$query = $this->db->get('message_template');
$data = array(
'id' => $id,
'name' => $name,
'subject' => $subject,
'detail' => $detail,
'type' => $type,
'status' => $status,
'create_date' => $create_date
);
if($query->num_rows() > 0)
{
// the line already exists, so update
$this->db->where('id', $id);
$this->db->update('message_template', $data);
}
else
{
$this->db->insert('message_template', $data);
}
или, если у вас есть желание использовать необработанные запросы, это должно быть немного быстрее (я бы не стал беспокоиться о поиске по идентификатору)
$sql = "INSERT INTO message_template
(id, name, subject, detail, type, status, create_date)
VALUES (1, " + $this->db->escape($name) + ", " + $this->db->escape($subject) + ", " + $this->db->escape($detail) + ", " + $this->db->escape($type) + ", " + $this->db->escape($status) + ", " + $this->db->escape($create_date) + ")
ON DUPLICATE KEY UPDATE name=" + $this->db->escape($name) + ", subject=" + $this->db->escape($subject) + ", detail=" + $this->db->escape($details) + ", type=" + $this->db->escape($type) + ", status=" + $this->db->escape($status) + ", create_date=" + $this->db->escape($create_date) + ";";
В противном случае, посмотрите DataMapper ORM , так что все вещи вашей базы данных будут автоматически обработаны.