обработка ошибок базы данных codeigniter - PullRequest
2 голосов
/ 26 мая 2011

Контроллер:

function edit($id)
{
    $this->form_validation->set_rules('name', 'Name', 'required|xss_clean');

    $this->load->model('manager_model');

    $pageData['type'] = 'managers';
    $pageData['title'] = "Edit Manager";
    $data['records'] = $this->manager_model->getManager($id);

    $this->load->view('header', $pageData);
    $this->load->view('db_options_view', $pageData);

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('managers/editManagerForm_view', $data);
    }
    else
    {   
        $name = $this->input->post('name');

        $this->manager_model->updateRecord($id, $name);

        $this->load->view('managers/editManagerSuccess_view');
    }

        $this->load->view('footer');
}   

Модель:

function updateRecord($id, $name)
{
    $data = array('name' => $name);
    $this->db->where('id', $id);
    $this->db->update('manager', $data);
}

Моя проблема заключается в следующем.Моя таблица базы данных не принимает повторяющиеся значения для поля имени.Поэтому, пока я тестировал его, я ввел повторяющееся имя, а codeigniter вернул следующее:

Произошла ошибка базы данных Номер ошибки: 1062 Повторяющаяся запись 'alan pardew' для ключа 2 UPDATE manager SET name = 'alan pardew 'WHERE id =' 2 'Имя файла: /var/www/vhosts/mysite.com/httpdocs/personal/models/manager_model.php Номер строки: 74

Я хотел бы обработать эту ошибкуя в контроллере, и я немного прочитал и обнаружил, что должен установить $db['default']['db_debug'] = FALSE;, чтобы кодовый кодировщик не отображал ошибки.

Есть ли способ просто отключить определенные ошибки, например, для дублированных записей?

Или вы бы порекомендовали отключить их полностью?

Кроме того ... я довольно новна codeigniter, так что если вы можете заметить какую-либо плохую практику в моем коде, не стесняйтесь указывать на это!

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Если вы используете MYSQL, вы можете иметь дело с дублирующимися ключами либо с помощью «INSERT IGNORE ...» (попытка вставить, если произошла ошибка, преобразуйте ее в предупреждение, чтобы запрос завершился сбоем молча), «REPLACE INTO ... "(вставить, если произошла ошибка с дублирующимися ключами, заменить старую запись новой) или" INSERT ... ON DUPLICATE KEY UPDATE ... "(вставить, если произошла ошибка с дублирующимися ключами, отменить вставку и выполнить обновлениеоператор в старой строке)

Например:

INSERT INTO log(id_page, view_count) VALUES (123, 1) ON DUPLICATE KEY UPDATE view_count = view_count + 1

К сожалению, библиотека активных записей средства зажигания кода не позволяет вам использовать это, насколько я знаю, поэтому самый простой способ длявам нужно было бы просто выбрать запись, чтобы просмотреть ее, если она уже существует, до ее вставки (или вы можете выполнить запросы самостоятельно без активной записи и проверить, возвращает ли она код ошибки).

2 голосов
/ 20 июня 2011

Для проверки в базе данных CI помогает:

Вы можете написать функцию callback_ и использовать ее в строке проверки ex;

$this->form_validation('field','fieldname','required|callback_check');

функция будет выглядеть примерно так

function check($str){
    if($str exist in database){
       $this->form_validation->set_message('check','nickname in use');
       return false;
    }
    return true;
}
...