मैं डेटाबेस (समान तालिका) में कुछ पंक्तियां डालने के लिए CodeIgniter में एक छोटी सी विधि चला रहा हूं। मैं देखना चाहता हूं कि लेनदेन के अंदर कौन सा सम्मिलन विफल रहा है (खिताब की सरणी लौटकर)। मेरे कोड है:कोडनिर्देशक, लेनदेन में त्रुटि ट्रैकिंग
$failure = array(); //the array where we store what failed
$this->db->trans_start();
foreach ($data as $ressourceCsv){ //data is an array of arrays to feed the database
$this->ajout_ressource($ressourceCsv); //method to insert (basically, just an insert with active record)
if (($this->db->_error_message())!=null) {
$failure[] = $ressourceCsv['title'];
}
}
$this->db->trans_complete();
return $failure;
तथ्य यह है कि अगर मैं इसे किसी लेन-देन नहीं बनाते हैं (कोई $ this-> db-> ट्रांस _...), यह पूरी तरह से काम करता है और मैं कुछ युक्त एक सरणी है खिताब। लेकिन लेनदेन के साथ, सरणी में पहली त्रुटि के बाद से प्रत्येक शीर्षक शामिल है। क्या लेन-देन को रोलबैक करने के कारण केवल उस प्रविष्टि से शीर्षक प्राप्त करने का कोई तरीका है?
मैं भी साथ की कोशिश की है:
$failure = array(); //the array where we store what failed
$this->db->trans_start();
foreach ($data as $ressourceCsv){ //data is an array of arrays to feed the database
if (!$this->ajout_ressource($ressourceCsv)) { //active record insertion return true
$failure[] = $ressourceCsv['title']; // if successful
}
}
$this->db->trans_complete();
return $failure;
ठीक है, यदि ऐसा है तो मैं इसे ठीक है, मिलता है लेनदेन की बहुत संरचना मुझे वांछित होने की अनुमति नहीं देती है। इसके अलावा मैं $-- db-> trans_status() === गलत का उपयोग नहीं कर सकता क्योंकि मैं वास्तव में एक कथन में लेनदेन लाइनों को लपेटता हूं (मैं हमेशा लेनदेन का उपयोग नहीं कर रहा हूं)। मेरी समस्या को हल करने के लिए, अंततः मैंने अंत में उन्हें हटाने के लिए सफल प्रविष्टि की आईडी संग्रहीत की है यदि मैं रोलबैक चाहता हूं और $ विफलता सरणी खाली नहीं है – Dargor
मुझे लगता है कि यदि आपको ** ** अपने सभी आवेषणों को एक बार में करना चाहिए किसी भी असफलताओं के बाद, आप ऐसा कर सकते हैं, लेकिन यदि आपका इरादा यह है कि कुछ विफल होने पर कोई भी इन प्रविष्टियों को नहीं देख पाएगा, तो आप इसे इस तरह पूरा नहीं कर सकते हैं। आपके पास "स्वीकृत" नामक एक बूलियन कॉलम हो सकता है और सभी प्रविष्टियों को समाप्त होने के बाद ही इसे सत्य सेट कर दिया जा सकता है और कोई भी विफल नहीं हुआ - और अपने अन्य प्रश्नों के लिए 'WHERE स्वीकृत = TRUE' खंड जोड़ें। – user9645
मैंने यह दिखाने के लिए अद्यतन जोड़ा कि यदि आप चाहते हैं तो लेनदेन के अंदर लूप कैसे करें। – user9645