मेरे पास दो जटिल PHP ऑब्जेक्ट्स हैं, जिनमें से प्रत्येक में कुछ MySQL तालिकाओं में डेटा है।PHP पीडीओ ऑब्जेक्ट कैसे पता लगा सकता है कि यह पहले से ही एक MySQL लेनदेन में है?
कभी कभी, मैं सिर्फ डेटाबेस से एक वस्तु एक को हटाने की जरूरत है, और है कि 3 SQL कथन लेता है।
कभी कभी, मैं डेटाबेस है, जो 4 SQL कथन लेता है से एक वस्तु बी को दूर करने की जरूरत है, और भी खोजने के लिए और वस्तु एक की उस वस्तु बी के स्वामित्व की सभी को दूर करने की जरूरत है जो।
तो फ़ंक्शन delete_A() के अंदर, मैं लेनदेन के अंदर उन बयानों को निष्पादित करता हूं। Function_B() के फ़ंक्शन के अंदर, मैं एक बड़ा बड़ा लेनदेन चलाने के लिए चाहता हूं जो delete_A() के अंदर की गतिविधियों को शामिल करता है। यदि बी को हटाने का पूरा परमाणु विफल रहता है, तो मुझे इसके सभी ए रोलबैक में पुनर्स्थापित करने की आवश्यकता है।
मैं delete_A की परिभाषा() को कैसे अपडेट कर अगर वहाँ पहले से ही एक बड़ा चल लेन-देन नहीं है केवल एक नई लेन-देन को खोलने के लिए।
मैं कुछ इस तरह करने में सक्षम होने की उम्मीद है, लेकिन अपने स्वयं के PDOConnect वर्ग है, जो एक $hasTransaction
चर है बनाने के लिए है autocommit
विशेषता के आधार पर beginTransaction()
function delete_A($a){
global $pdo;
$already_in_transaction = !$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
if(!$already_in_transaction){
$pdo->beginTransaction();
}
//Delete the A
if(!$already_in_transaction){
$pdo->commit();
}
}
function delete_B($b){
global $pdo;
$pdo->beginTransaction();
foreach($list_of_As as $a){
delete_A($a);
}
$pdo->commit();
}
आप विदेशी कुंजी बाधाओं का उपयोग करने पर विचार करना चाहेंगे (मतलब है कि आपको myISAM से उन इंजनों में स्विच करना होगा जो उन्हें समर्थन देते हैं) - इस तरह आप डीबी को आपके लिए अनुकरण करने के बजाय आपके लिए डिस्लेड कर सकते हैं। – prodigitalson