Обрабатывать ошибку базы данных в CodeIgniter - PullRequest
3 голосов
/ 25 августа 2011

При выполнении запроса к базе данных я получаю следующую ошибку:

Error Number: 1062

Duplicate entry '1' for key 1

INSERT INTO `message_template` (`id`, `name`, `subject`, `detail`, `type`,
                               `status`, `create_date`) 
VALUES (1, 'adaa', '', 'dss', 'SMS', 'Active', '2011-08-25 19:34:08')

Filename: C:\AppServ\www\ci\system\database\DB_driver.php

Line Number: 330

Как получить номер ошибки (например, 1062) для обработки ошибки?

Спасибо

1 Ответ

9 голосов
/ 25 августа 2011

Это ошибка из базы данных.

Вы можете скрыть в /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 , так что все вещи вашей базы данных будут автоматически обработаны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...