2009-04-09 14 views
5

में डेटाबेस से प्रोसेसिंग त्रुटियों के लिए सर्वोत्तम अभ्यास मेरे पास मेरे वेब एप्लिकेशन डेटाबेस में एक अद्वितीय कुंजी (date + userid) वाली एक तालिका है। मैं निम्नलिखित त्रुटि प्राप्त जब मैं मौजूदा date और userid साथ रिकॉर्ड सम्मिलित करने का प्रयास करें:कोडइग्निटर

dupicate key in table 

मैं आवेदन config में डेटाबेस डिबगर चालू है, क्योंकि मैं MySQL त्रुटि संख्या और संदेशों का उपयोग करने की जरूरत है। अब मुझे इस त्रुटि को संसाधित करने की आवश्यकता है। मैं नियंत्रक में हार्ड कोडित स्थिरांक का उपयोग कर सकता हूं, लेकिन मुझे लगता है कि यह अच्छा विचार नहीं है। मुझे कई स्थानों पर डेटाबेस त्रुटि हैंडलिंग की आवश्यकता है, और मुझे CodeIgniter की त्रुटि हैंडलिंग पसंद नहीं है। डेटाबेस त्रुटियों के प्रसंस्करण से संबंधित सबसे अच्छा अभ्यास क्या है।

उत्तर

9

हम इस तरह हमारी परियोजना निर्माण में उपयोग करें:

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

लेकिन इस गैर-दस्तावेजी कार्य करता है और अगले विज्ञप्ति में यह बदल सकता है। बेशक आप बस mysql त्रुटि संभाल समारोह के लिए मानक php का उपयोग कर सकते हैं:

mysql_errno() 
mysql_error() 

आंतरिक सीआई इन कार्यों का उपयोग करें।

मेरे लिए सबसे अच्छा अभ्यास (BaseModel)

$this->db->_error_number(); 

और निर्धारित त्रुटि,

$this->db->_error_message(); 

सभी अपने मॉडल से ली गई जानकारी त्रुटि संदेश के साथ अगले फेंक अपवाद कस्टम मॉडल के आधार वर्ग में इस्तेमाल होता है बेसमोडेल से व्युत्पन्न, और डीबी त्रुटि के लिए अंतिम अनुरोध की जांच करने के लिए कॉल विधि और आपके मॉडल को अपवाद को संभालना चाहिए और इसे संसाधित करना चाहिए (अतिरिक्त रूप से लॉग हो सकता है), निश्चित रूप से आप परिणाम परिणाम के रूप में चेक परिणाम लागू कर सकते हैं और अपवाद फेंकने से बच सकते हैं।

+0

मैं उपयोगकर्ता भी यह काम करता हूं। बेसमोडेल यह अच्छा विचार है, और मैं इसके बारे में सोचता हूं। धन्यवाद। मॉडल हैंडलिंग अपवाद के साथ आईएमओ फेंक अपवाद विधि थोड़ा मुश्किल है और कोई पारदर्शी नहीं है। क्वेरी चलाने के तुरंत बाद मुझे सरल प्रोसेसिंग त्रुटियों की आवश्यकता है। मुझे _error_number() – drnk

+0

पर निर्णय भरोसा करने की आवश्यकता है, जो कि रचनाकार नहीं हैं, लेकिन अच्छा जवाब है। – Zack

0

मैं एक अलग सुझाव प्रपत्र आप नियमों को परिभाषित करने की जरूरत है सबमिट करते समय इस बात के लिए मैं इस

$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(); 
} 

इस तरह आप हमेशा मोर्चे पर डेटाबेस त्रुटियों से बचने जाएगा और उपयोगकर्ता एक में चीजों को देखने के प्राप्त कर सकते हैं बेहतर तरीका। आपको डीबी त्रुटियों को संभालना नहीं है क्योंकि फॉर्म सत्यापन आपके लिए सबकुछ संभाला जा रहा है।