CodeIgniter'daki Veritabanından İşleme Hatalar için En İyi Uygulamalar

2 Cevap php

Benim web uygulaması veritabanında benzersiz bir anahtar (date + userid) ile bir tablo var. I date ve userid Ben şu hatayı alırsınız varolan kayıt eklemek çalıştığınızda:

dupicate key in table

Ben MySQL hata numaralarını ve mesajları kullanmak için gerekli, çünkü uygulama config veritabanı debugger döndü. Şimdi bu hatayı işlemek gerekir. Ben denetleyicisi sabit kodlanmış sabitleri kullanabilirsiniz, ama ben bunun iyi bir fikir olmadığını düşünüyorum. Ben birçok yerde veritabanı hata işleme gerek ve ben CodeIgniter'ın hata işleme sevmiyorum. Ne veritabanı hataları işleme konusunda en iyi uygulamadır.

2 Cevap

Biz bu gibi proje inşaatları kullanın:

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

but this undocumented functions and in next releases this could change. Of course you can simply use standard php for mysql error handle function:

mysql_errno()  
mysql_error()

dahili CI bu işlevleri kullanabilirsiniz.

Bana gelince iyi uygulama özel Model'in temel sınıfta kullanımı (Temel Model)

$this->db->_error_number();

ve alınan bilgilerin hata mesajı ile, sonraki atış istisna hata tespit

$this->db->_error_message();

Tüm Model Temel Model türetilen ve tabii ki sonuç değeri olarak kontrol sonucu uygulamak ve durum atma önleyebilirsiniz, db hata ve Model özel durum işlemesi gerekir için son isteğini kontrol yöntemini çağırın, ve (ayrıca log olabilir) işlemek.

Bunun için farklı bir öneriniz var ben bunu tavsiye edecek

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

formu göndererek yaparken kurallarını tanımlamak gerekir. her zaman veritabanı ile etkileşim için geri aramalar kullanın

Kontrolör çağırma yöntemi

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;
    }
}

Ve model yöntemi

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

Bu yol her zaman ön veritabanı hataları önlemek ve kullanıcı daha iyi bir şekilde şeyleri görmek alabilirsiniz. Form doğrulama sizin için her şeyi ele çünkü db hataları işlemek zorunda kalmazsınız.