Лучшие практики для обработки ошибок из базы данных в CodeIgniter - PullRequest
5 голосов
/ 09 апреля 2009

У меня есть таблица с уникальным ключом (date + userid) в базе данных моего веб-приложения. Когда я пытаюсь вставить запись с существующими date и userid, я получаю следующую ошибку:

dupicate key in table

Я включил отладчик базы данных в конфигурации приложения, потому что мне нужно было использовать номера ошибок и сообщения MySQL. Теперь мне нужно обработать эту ошибку. Я могу использовать жестко закодированные константы в контроллере, но я думаю, что это не очень хорошая идея. Мне нужна обработка ошибок базы данных во многих местах, и мне не нравится обработка ошибок CodeIgniter. Что является лучшей практикой в ​​отношении обработки ошибок базы данных.

Ответы [ 2 ]

10 голосов
/ 09 апреля 2009

Мы используем в нашем проекте такие конструкции:

$this->db->_error_number();  
$this->db->_error_message();

но это недокументированные функции и в следующих выпусках это может измениться. Конечно, вы можете просто использовать стандартный php для функции обработки ошибок mysql:

mysql_errno()  
mysql_error()

внутренне CI использует эти функции.

Что касается меня, лучше всего использовать базовый класс пользовательской модели (BaseModel)

$this->db->_error_number();

и определите ошибку, исключение следующего выброса с информационным сообщением об ошибке, взятым из

$this->db->_error_message();

Вся ваша Модель, полученная из BaseModel, и метод вызова для проверки последнего запроса на наличие ошибки БД, и ваша Модель должна обработать исключение и обработать его (может быть дополнительно зарегистрировано), конечно, вы можете реализовать результат проверки как значение результата и избежать исключение.

1 голос
/ 22 января 2013

У меня есть другое предложение для этого, я буду рекомендовать это

$this->form_validation->set_rules('email', 'Email', 'required|max_length[32]|valid_email|callback_email_available');

при отправке формы вам необходимо определить правила. всегда использовать обратные вызовы для взаимодействия с базой данных

Метод обратного вызова контроллера

public function email_available($str)
{
    // You can access $_POST variable
    $this->load->model('mymodel');
    $result =   $this->mymodel->emailAvailability($_POST['email']);
    if ($result)
    {
        $this->form_validation->set_message('email_available', 'The %s already exists');
        return FALSE;
    }else{
        return TRUE;
    }
}

И модель метода

public function emailAvailability($email)
{
    $this->db->where('email',$email);
    $query  =   $this->db->get('tablename');
    return $query->row();
}

таким образом, вы всегда будете избегать ошибок базы данных с первого взгляда и сможете лучше видеть вещи. Вам не нужно обрабатывать ошибки БД, потому что проверка формы обрабатывает все для вас.

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